_必须遵循方法

Aar*_*ken 4 scala

从更复杂的程序简化:

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,以及什么是从这样的东西中获得部分功能的正确方法?

Esk*_*ola 8

在Scala中,方法和函数之间存在差异.方法始终属于对象,但函数是对象.m可以使用将方法转换为函数m _

请参阅Scala中方法和函数之间的区别


Kri*_*mbe 6

scala> def g(func: String => String) = func(_)
g: (func: (String) => String)(String) => String
Run Code Online (Sandbox Code Playgroud)

括号使一切变得不同.这是关于_的绑定的棘手问题之一; 它可以用来将一个方法提升到一个闭包,它可以用于部分应用,但这两个用法是不一样的!