Cha*_*ler 7 scala anonymous-function
这有效:
scala> def test(name: String = "joe"): Boolean = true
test: (name: String)Boolean
我希望这可以以同样的方式工作:
scala> val test: String => Boolean = { (name: String = "joe") => true }
<console>:1: error: ')' expected but '=' found.
Tra*_*own 16
无聊,正确的答案是否定的,你不能,但实际上你可以用2.11中的实验单抽象方法(SAM)合成.
首先,您需要使用apply方法参数的默认值定义自己的SAM类型:
trait Func {
def apply(name: String = "joe"): Boolean
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用函数文字表示法来定义Func(请注意,您需要启动REPL -Xexperimental才能使此步骤起作用):
val f: Func = { (name: String) => name == "joe" }
Run Code Online (Sandbox Code Playgroud)
要不就:
val f: Func = _ == "joe"
Run Code Online (Sandbox Code Playgroud)
通常的东西:
scala> f("joe")
res0: Boolean = true
scala> f("eoj")
res1: Boolean = false
Run Code Online (Sandbox Code Playgroud)
和妙语:
scala> f()
res2: Boolean = true
Run Code Online (Sandbox Code Playgroud)
它并不完全是你要求的语法,并且没有任何承诺可以保留实验状态,即使它确实存在,也可能不支持默认参数 - 但我仍然认为它现在很有效.
在Travis Brown的答案中扩展"无聊,正确答案是否定的":
函数(即FunctionN[...]类型的对象)在Scala中不能有默认参数,只有方法才能.由于匿名函数表达式生成函数(而不是方法),因此它们不能具有默认参数.