为什么下面的代码片段中的f赋予值1。我期望f()
为1。如何获得对函数f:()=> Int
的引用
var y = 0
def f():Int = {y + 1}
f
scala中的某些东西使我发疯。
答案 0 :(得分:5)
如果要调用的函数没有参数,则可以放括号。这就是f
取值为1的原因。
如果编译器知道您期望该类型的值,则完全相同的表达式也可以评估为函数引用。
val foo: () => Int = f
答案 1 :(得分:3)
您可以使用_获得此信息:
var y = 0
def m:Int = {y + 1}
val result = m _ // type of result is an instance of Function0 "() => Int"
当编译器不希望使用Function对象时,请使用_。
答案 2 :(得分:2)
如果您希望f
是类型为() => Int
且表达式为{ y + 1 }
的表达式,则可以这样定义它:
var y = 0
val f: () => Int = () => { y + 1 }
现在
f
不执行任何操作(它只返回() => Int
类型的lambda),但是
f()
给予1
。
您实际上并不需要类型说明,这也可以:
val f = () => { y + 1 }