函数组合导致方法首先缺少参数列表

Function composition results in missing argument list for method first

假设我们有以下函数:

def first(a: A): B = ???
def second(b: B): C = ???

我想用 andThen 来组合它们,但是下面的代码:

(first andThen second)(a)

结果:

<console>:14: error: missing argument list for method first
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `first _` or `first(_)` instead of `first`.                                                                                                                                                                    
(first andThen second) (1)

andThen()Function 上的一个方法。正如您所定义的,first() 是一种方法 (def),而不是函数。那些是 different entities.

您可以将其定义为一个函数...

val first : A => B = (a:A) => ???

... 或者您可以使用 将其提升为功能状态。

(first _ andThen second)

据说 Scala 3 将提供更透明的 eta 扩展机制,这样方法和函数之间的区别就不会那么麻烦了。