Пока что единственный родной метод объединения функций в Scala, о котором я знаю, это использование andThen / compose.Это делает работу, но все еще выглядит очень неуклюжим.Например, если у меня есть 3 функции для применения к значению (f1 (f2 (f3 (value)))), я должен сделать что-то вроде этого:
(f1 _ andThen f2 andThen f3)(value)
Проблемы становятся еще хуже, когда цепочкадлиннее и функции требуют более 1 параметра.F # очень элегантно решает эту головоломку с помощью оператора '|>', но этот подход не очень хорошо работает в Scala, поскольку язык во многом опирается на точечную нотацию, а каррирование необязательно.
Так что вопрос в том,Можно ли сделать что-то подобное в Scala:
def addNumber(i: Int, s: String) = s + i
def doubleString(s: String) = (s + s, (s + s).length)
def trimString(i: (String, Int)) = i._1.substring(0, i._2-1)
addNumber(1,"Hello").doubleString.trimString
Другими словами, можем ли мы объединить функции в цепочку при условии, что они имеют разные возвращаемые типы / аргументы.