Составление функций с несколькими аргументами против нескольких списков аргументов - PullRequest
1 голос
/ 16 января 2020

Учитывая следующий пример, я вижу, что это имеет значение, если я пытаюсь составить функцию с несколькими списками аргументов или просто с несколькими аргументами. Я не понимаю, почему это не соответствует.

val foo: Int => Int => Int = ???
foo.curried.andThen(???) // KO
foo.tupled.andThen(???) // KO
foo.andThen(???) // OK
val bar: (Int, Int) => Int = ???
bar.curried.andThen(???) // OK
bar.tupled.andThen(???) // OK
bar.andThen(???) // KO

Почему компилятор Scala не может обрабатывать bar как функцию, которую я могу compose / вызвать andThen вкл?

Ответы [ 2 ]

3 голосов
/ 16 января 2020

Невозможно реализовать Function2.compose, поскольку аргумент должен быть функцией, которая возвращает два значения (для передачи Function2.apply). Язык Scala не поддерживает множественные возвращаемые значения, поэтому компилятор ничего не может с этим поделать.

Реализация Function2.andThen была бы возможной, но парадигма объединяет в цепочке значение с помощью нескольких функций, и это невозможно с Function2 из-за той же проблемы с возвращаемыми значениями.

0 голосов
/ 16 января 2020

хорошо, я нашел это - scala.Function2 не реализует andThen в отличие от Function1

...