Rah*_*thy 3 scala type-inference
我的问题是关于奥德斯基的讲座3.5(不是作业!):
19:15的练习问:"这是什么类型:if (true) 1 else false"
在他的解释中,Odersky认为类型是AnyVal因为它是Int和Boolean(两个条件分支的类型)最具体的超类型.
我问自己为什么类型检查器不够智能,只能看到第一个分支实际上是相关的,因此可以推断出类型Int?
Tom*_*icz 11
这是一个类似的问题,为什么以下不能用Java编译:
throw new Foo();
return 42; //unreachable statement
Run Code Online (Sandbox Code Playgroud)
但这编译:
if(true)
throw new Foo();
return 42;
Run Code Online (Sandbox Code Playgroud)
基本上编译器必须停在某处.特别是Scala编译器,已经很慢了.一旦识别true一如既往通态的,有人可能会问:怎么样:1 == 1,2 * 21 == 42甚至x == 7哪里x是val.
绘制一条线是很困难的,因此编译器只是假设每个都if可以有两个分支.IDE或代码验证工具负责发现这些不可能或可能不正确的表达式.
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |