тока через .let() чейнить функции
но как то выглядит не особо интуитивно
и запись гораздо длиннее получается
есть еще какие то варианты?
спасибо
val g = { x -> f(x) }
Если очень нравится подход из Джавы, то реализация очевидна: inline fun <T, R, V> ((T) -> R).andThen(after: (R) -> V)): (T) -> V = { after(it) }
да, спасибо уже сделал похожее)) fun <T, R, R2> ((T) -> R).andThen(f2: (R) -> R2) = { arg: T -> this(arg).let(f2) } странно что в котлине нет ничего стандартного на эту тему
Не странно, потому что вроде бы хватает просто лямбд?
Ну? Что экономит такая функция? Могу только какой-то довольно редкий вывод типов представить.
а как же комбинирование функций? ФП во все поля, все дела. инфиксная фабрика композиции лямбд если есть уже два объекта функции, то третью в любом случае делать
Вы лучше объясните, чем не хватает обычного синтаксиса лямбды для композиции. Зачем прятать создание функции, если можно просто взять да создать?
val f = f1.andThen(f2) VS val f = { x -> f2(f1(x)) }
А хотя есть смысл в том, что так видна последовательность.
Но зачем? В каком реальном коде вам это может понадобитьcя? (примеры из домашней работы по курсу FP не предлагать)
У меня где-то был сниппет на эту тему. Сразу не нашёл. Пришлось воспроизводить по памяти. fun toString(i: Int): String = i.toString() fun toInt(s: String): Int = s.toInt() infix fun <A, B, C> ((B) -> C).o(other: (A) -> B): (A) -> C = { this(other(it)) } fun main() { println((::toString o ::toInt)("1")) }
Какой ужас)) я с точки зрения читать это все, без обид
Суровый кровавый интерпрайз бывает иногда с таким. Ишью заводить не спешу ибо можно сделать под себя экстеншн, тем более не много кому он нужен
Если тут о символизирует точку из теорката, то там композиция имеет другой порядок
Обсуждают сегодня