将现有函数分配给val?

时间:2015-03-18 22:32:46

标签: function scala functional-programming

Scala首页说

  

函数是第一类对象。用保证类型组合它们   安全。在任何地方使用它们,将它们传递给任何东西。

但我似乎无法在val中存储函数,就像我在Scala中使用其他第一类对象一样。

scala> def myFunction = { println("hello world") }
myMethod: Unit

scala> myFunction
hello world

scala> val myVal = myFunction
hello world
myVal: Unit = ()

scala> myVal

scala>

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:9)

因此,函数是第一类值,但def创建方法,而不是函数。您可以通过在方法名称后附加_来使用“eta-expansion”将任何方法转换为函数:

scala> def myFunction = { println("hello world") }
myFunction: Unit

scala> myFunction _
res0: () => Unit = <function0>

scala> res0()
hello world

scala> val myVal = myFunction _
myVal: () => Unit = <function0>

scala> myVal
res2: () => Unit = <function0>

scala> myVal()
hello world