Scala函数定义与应用程序

时间:2018-12-04 23:17:41

标签: scala

为什么下面的代码片段中的f赋予值1。我期望f()为1。如何获得对函数f:()=> Int的引用

var y = 0
def f():Int = {y + 1}

f

scala中的某些东西使我发疯。

3 个答案:

答案 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 }