2012-03-15 147 views

回答

8

(T1,...,Tn) => T是參數類型爲T1Tn和返回類型T的函數的類型。所以() => Unit是不帶參數並且返回類型單位的函數的類型。因此List[() => Unit]是包含這些功能的列表的類型。

+0

「T1到Tn類型的參數」,所以像f(T1):Unit','f(T2):Unit'這樣的函數對於這個列表是有效的類型嗎?那麼像'f(T1,T2)'這樣的東西呢? – aitchnyu 2012-03-15 17:37:00

+2

@aitchnyu號如果你有一個List [(T1,T2)=> Unit]類型的列表,那麼該列表存儲帶有兩個參數(第一個具有類型T1和第二個T2)和返回類型Unit 。所以你可以存儲一個定義爲'f(x:T1,y:T2):Unit'的函數,但不能將其定義爲'f(x:T1)'或'f(y:T2)'。同樣,一個List [()=> Unit]類型的列表只存儲完全沒有參數的函數。 – sepp2k 2012-03-15 17:41:59

4

首先,你有一個函數列表。每個函數都沒有參數(這是開關圓括號()的意思)並返回Unit,這是一個沒有結果的值,類似於void。

在一個純粹的功能世界中,()=>Unit類型的函數是無用的,因爲它不需要任何東西並且什麼都不返回。但是,斯卡拉不是一種純粹的功能語言,它有副作用。爲了有用,列表中的功能肯定會有副作用。由於它們是回調函數,因此它們也有關於何時啓動的想法。