2015-03-18 52 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