2015-03-18 54 views
3

斯卡拉的头版说将现有函数分配给val?

函数是第一类对象。撰写他们的保证类型 安全。在任何地方使用它们,将它们传递给任

但我似乎无法存储一个函数在val像我在斯卡拉与其他一流的对象。

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

scala> myFunction 
hello world 

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

scala> myVal 

scala> 

什么是正确的方法来做到这一点?

回答

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