2012-09-28 37 views
9

什麼是下面斯卡拉聲明的意思是:何謂「的MyType = INT =>布爾」

type MyType = Int => Boolean 

這是我的理解:

我聲明瞭一個新類型「的MyType」,但什麼是高階函數意味着「INT =>布爾」

+1

注意,'INT => Boolean'是_not_高階函數(即使不是如果摘錄從[Coursera的]莖(http://www.coursera.org/course/progfun)「第2周:高階函數」任務;-)) – netzwerg

+0

@netzwerg是的,它似乎即使是'簡單'的東西很難找到。 – user701254

+1

不要擔心,這個很簡單:高階函數是將另一個函數作爲輸入參數的函數,或者返回/輸出另一個函數([Wikipedia](http://en.wikipedia.org/wiki/Higher -order_function)) – netzwerg

回答

14

它與其說是宣佈一個新的爲聲明的新型別名。它們仍然是相同的類型:但別名可以讓您的寫法更加簡潔。

Int => Boolean是一個函數的類型,它接受一個參數Int,並返回一個布爾值。

例如,像 「大於5」 的功能可以有Int => Boolean類型:

type MyType = Int => Boolean 
val greaterThan5: MyType = (x: Int) => x > 5 
greaterThan5(7) // true 
3

你是正確的,下面的編譯:

type MyType = Int => Boolean 
def positive(x: Int) = x > 0 
val fun: MyType = positive 
fun(42) //yields true 

在這裏,您聲明類型別名說MyType相當於以Int並返回Boolean的函數。然後你創建一個匹配這種聲明的方法。最後,將此方法分配給類型爲MyType的變量。它編譯和工作得很好。

注意,這只是一個別名,而不是一個新類型:

trait MyType2 extends (Int => Boolean) 
val fun2: MyType2 = positive _ 
error: type mismatch; 
found : Int => Boolean 
required: MyType2 
     val fun2: MyType2 = positive _ 
         ^