2014-03-05 100 views
1

如果我有以下類型和功能:階參考值

object M { 
    type X[Boolean] = Int => Boolean 

    def retrieveVal(x: X[Boolean]) : Boolean = //retrieve the Boolean value of x 
} 

我怎麼會去檢索並返回boolean值?

回答

4

這是一個奇怪的類型別名。它有一個正式的類型參數(名稱不相關,因此Boolean的選擇是誤導性的),它定義了一個從Int到該任意類型的函數。然後,您定義的方法,retrieveVal,需要一個特定種類的X出現這種情況是X[Boolean](這裏Boolean實際類型參數,因此Boolean我們熟悉),並返回一些Boolean。但是,作爲參數傳遞的函數x需要參數Int,並且沒有證據。

因此,如果您retrieveVal是這樣的,而不是定義:

def retrieveVal(i: Int, x: X[Boolean]): Boolean = ... 

,你可以這樣定義它:

def retrieveVal(i: Int, x: X[Boolean]): Boolean = x(i) 

機智:

scala> type X[Boolean] = Int => Boolean 
defined type alias X 

scala> def retrieveVal(i: Int, x: X[Boolean]): Boolean = x(i) 
retrieveVal: (i: Int, x: Int => Boolean)Boolean 

scala> retrieveVal(23, i => i % 2 == 0) 
res0: Boolean = false 
+0

要解釋的第二句對於不熟悉所使用術語的人來說:'X'的定義等同於'type X [T] = Int => T',所以你需要考慮如果這是你想要的或者類型X = Int => Boolean'。 –