2014-09-03 86 views
0

我是新來斯卡拉,今天我看到了一個函數定義我無法理解:scala中的這些測量是什麼?

def f(x: Int): Int = x 
val func = (x: Int, y: Int, z: Int) => f(x) 

於是在Scala中,什麼是定義func的語法?對我而言,func只是一個接受三個參數的函數:func: (Int, Int, Int) => Int = <function3>。爲什麼不只是將func定義爲

def func(x: Int, y: Int, z: Int): Int = f(x) 

這是出於效率的原因嗎?因爲我們只需要評估一次val。

+0

http://stackoverflow.com/questions/18887264/what-is-the-difference-between-def-and-val-to-define-a-function查看接受的答案的最後一段。 – vptheron 2014-09-03 14:35:28

回答

-1

func被定義爲一個保存具有該簽名的函數的值,並且使用這樣的函數進行初始化。在將來的某個時候,在類方法中,您可以提供不同的功能。它將被調用爲func(1,2,3),並根據在那個時間點實際分配給func的函數返回結果。

這爲覆蓋子類中的方法提供了一種替代方法。例如,你可能有一個狀態機實現需要以不同的方式響應輸入,這取決於狀態;這是通過改變接收函數的值來適當地做出響應的可行方式。

+0

'func'是一個'val'。你不能重新分配它。 – 2014-09-03 15:08:55

+0

我只能懇求過早的衰老。你是對的。 – 2014-09-03 18:51:07