let*_*eti 4 functional-programming scala higher-order-functions
为什么这是非法的:
def foobar() = {}
val option: Option[() => Unit] = Some(foobar)
Run Code Online (Sandbox Code Playgroud)
虽然这是合法的:
def foobar() = {}
val intermediate: () => Unit = foobar
val option: Option[() => Unit] = Some(intermediate)
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,编译器抱怨赋值的右侧是类型Option[Unit]而不是Option[() => Unit].
我怀疑这foobar有待评估而不是作为变量传递Some(),但我不确定.
acj*_*jay 12
这是因为在评估empty-parens方法时括号是可选的.按照惯例,他们不使用纯粹的方法,但这只是惯例.所以你是对的,它实际上是评估foobar而不是eta-将它扩展为一个函数.您可以通过使用下划线运算符显式调用eta扩展来修复您的第一个示例:
val option: Option[() => Unit] = Some(foobar _)
Run Code Online (Sandbox Code Playgroud)