2016-10-27 29 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(_) => } 
        ^