组合具有多个参数的函数与多个参数列表

Composing functions with multiple arguments vs multiple argument lists

给出以下示例,我可以看出,如果我尝试使用多个参数列表或仅使用多个参数来组合一个函数,情况会有所不同。我不明白为什么它不一致。

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

好的,我找到了 - scala.Function2Function1

相比没有实现 andThen

无法实现 Function2.compose,因为参数必须是 return 两个值(传递给 Function2.apply)的函数。 Scala 语言不支持多个 return 值,因此编译器对此无能为力。

实施 Function2.andThen 是可能的,但范例是通过多个函数链接一个值,而 Function2 是不可能的,因为 return 值存在同样的问题。