Scala等式:为什么这段代码要编译?

Scala等式:为什么这段代码要编译?,scala,Scala,scala中有一个特别的问题每次都会让我头疼。每次它咬我的时候。。。它咬得很厉害 为什么这一行要编译 val x = "10" if (x != 10) { print("do something") } 这一行编译和执行,但对于“类型安全”语言,如scala。。。这一行应该会导致编译错误,因为所有类型的祖先都是Any,Any defines方法=。看 因此,编译器向后弯曲以使代码能够编译,并沿着String(“10”)的类型层次结构向上移动,直到找到的实现=为您提供了更多帮助 scal

scala中有一个特别的问题每次都会让我头疼。每次它咬我的时候。。。它咬得很厉害

为什么这一行要编译

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

这一行编译和执行,但对于“类型安全”语言,如scala。。。这一行应该会导致编译错误,因为所有类型的祖先都是Any,Any defines方法
=。看


因此,编译器向后弯曲以使代码能够编译,并沿着
String(“10”)
的类型层次结构向上移动,直到找到
的实现=为您提供了更多帮助

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(_) => }
                       ^
scala>vali=17
i:Int=17
scala>“42”匹配{case`i`=>}
:13:错误:类型不匹配;
找到:Int
必需:字符串
“42”匹配{case`i`=>}
^
scala>案例类C(i:Int)
定义的C类
scala>42匹配{案例C()=>}
:14:错误:无法将构造函数实例化为预期类型;
发现:C
必填项:Int
42匹配{情况C()=>}
^

您应该查看scalaz
==
操作符以获得所需的内容。为什么你认为它不应该编译
10
不等于
“10”
,因此您得到的结果是正确的。为什么你认为比较不同类型的对象是不可能的?
==
只是一种方法,而不是一个操作符,你会怎么做呢?