Scala等式:为什么这段代码要编译?
scala中有一个特别的问题每次都会让我头疼。每次它咬我的时候。。。它咬得很厉害 为什么这一行要编译Scala等式:为什么这段代码要编译?,scala,Scala,scala中有一个特别的问题每次都会让我头疼。每次它咬我的时候。。。它咬得很厉害 为什么这一行要编译 val x = "10" if (x != 10) { print("do something") } 这一行编译和执行,但对于“类型安全”语言,如scala。。。这一行应该会导致编译错误,因为所有类型的祖先都是Any,Any defines方法=。看 因此,编译器向后弯曲以使代码能够编译,并沿着String(“10”)的类型层次结构向上移动,直到找到的实现=为您提供了更多帮助 scal
val x = "10"
if (x != 10) {
print("do something")
}
这一行编译和执行,但对于“类型安全”语言,如scala。。。这一行应该会导致编译错误,因为所有类型的祖先都是Any,Any defines方法
=代码>。看
因此,编译器向后弯曲以使代码能够编译,并沿着String(“10”)
的类型层次结构向上移动,直到找到的实现=接受整数模式匹配的code>为您提供了更多帮助
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”
,因此您得到的结果是正确的。为什么你认为比较不同类型的对象是不可能的?==
只是一种方法,而不是一个操作符,你会怎么做呢?