从更复杂的程序简化:
scala> type T = (String) => String
defined type alias T
scala> def f(s: String) = s + " (parsed)"
f: (s: String)java.lang.String
scala> f _
res0: (String) => java.lang.String = <function1>
scala> def g(func: T) = func _
<console>:6: error: _ must follow method; cannot follow (String) => String
def g(func: T) = func _
^
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么这不起作用.一个方法和一些形式的东西之间的区别是什么(Type1, Type2 ...) => Type,以及什么是从这样的东西中获得部分功能的正确方法?
scala> def g(func: String => String) = func(_)
g: (func: (String) => String)(String) => String
Run Code Online (Sandbox Code Playgroud)
括号使一切变得不同.这是关于_的绑定的棘手问题之一; 它可以用来将一个方法提升到一个闭包,它可以用于部分应用,但这两个用法是不一样的!