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>
这样做的正确方法是什么?
答案 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