Trong khi học scala
tôi stumbled khi đoạn lạ sau:Scala không đưa ra lỗi biên dịch khi gán giá trị cho một chữ số?
package temptests
object TempTest {
//def 2 = 123 // does not compile
val 2 = 123 // compiles, but leads to an exception at runtime
def main(args: Array[String]) = { // just do something to load this class
println("Hello")
}
}
Tôi mong rằng trình biên dịch sẽ ném một lỗi trên val 2 = 123
vì định danh không phải bắt đầu bằng một chữ số, nhưng mã biên dịch mà không có một cảnh báo. Tuy nhiên, khi chạy nó ngay lập tức ném một ngoại lệ:
Exception in thread "main" java.lang.ExceptionInInitializerError at temptests.TempTest.main(TempTest.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) Caused by: scala.MatchError: 123 (of class java.lang.Integer) at temptests.TempTest$.(TempTest.scala:5) at temptests.TempTest$.(TempTest.scala) ... 6 more
Tôi chỉ tò mò: làm thế nào được val 2 = 123
hiểu bởi Scala
? Tại sao không có lỗi biên dịch?
Tôi chắc chắn 100% đây là một bản sao, nhưng tôi không thể cho cuộc sống của tôi tìm thấy một! –