2016-10-27 50 views
3

scala中有一個特殊的問題,每次都會咬我。每它咬我的時候,它就咬很辛苦......斯卡拉平等:爲什麼這個代碼編譯?

爲什麼這行編譯

val x = "10" 
if (x != 10) { 
    print("do something") 
} 

此行編譯和執行,但對於像斯卡拉一個「類型安全」的語言......這行應導致編譯錯誤

+1

你應該看看scalaz'==='運算符來得到你想要的。 http://stackoverflow.com/a/30243825/4080476 –

+1

你爲什麼認爲它不應該編譯? '10'不等於'「10」',所以你得到的結果是正確的。爲什麼你認爲應該不可能比較不同類型的對象? – Dima

+0

'=='只是一種方法,而不是操作符,你會如何做到這一點? –

回答

1

模式匹配給你一個多一點幫助!=的實現。

scala> val i = 17 
i: Int = 17 

scala> "42" match { case `i` => } 
<console>:13: error: type mismatch; 
found : Int 
required: String 
     "42" match { case `i` => } 
         ^

scala> case class C(i: Int) 
defined class C 

scala> 42 match { case C(_) => } 
<console>:14: error: constructor cannot be instantiated to expected type; 
found : C 
required: Int 
     42 match { case C(_) => } 
        ^