2012-10-02 152 views
2

我剛剛讀了關於案例序列的部分功能和語法有點奇怪。Scala - 案例序列

例如

def test: Int => Int = { 
    case 1 => 2 
    case 2 => 3 
    case _ => 0 
}  

我預計test沒有參數,將返回類型Int => Int

的功能,但經過一些測試,似乎它需要一個int作爲參數和返回INT,所以我把它改寫爲...

def test1(i: Int): Int = 
    i match { 
    case 1 => 2 
    case 2 => 3 
    case _ => 0 
    } 

testtest1平等嗎?

+0

你做了什麼樣的測試鉛你斷定他們是平等的嗎? –

回答

5

前面的代碼確實返回類型Int => Int的函數。

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_25). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

def test: Int => Int = { 
case 1 => 2 
case 2 => 3 
case _ => 0 
} 

// Exiting paste mode, now interpreting. 

test: Int => Int 

scala> test 
res0: Int => Int = <function1> 

scala> test.apply(1) 
res1: Int = 2 

也許什麼是混淆的是,應用可以直接調用:

scala> test(1) 
res2: Int = 2 
+0

啊,這很有道理,非常感謝。 –

6

它們並不相同。 test是一種返回Function1[Int,Int]的方法,test1是一種採用Int並返回Int的方法。這也與模式匹配表達式完全無關。

0

測試類型的函數「INT =>內部」 TEST1是使用局部功能(一個方法匹配表達式)在內部。 所以他們不平等。

如果您想查詢類型使用REPL:

:type test 
Int => Int 

:type test1 _ 
Int => Int 
+0

那麼答案有什麼問題? – Jan