最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java中scala变量查找的问题
时间:2016-08-24 编辑:简简单单 来源:一聚教程网
在Java/Scala的一个方法里,存在与全局变量同名的局部变量的话将会覆盖这个全局变量,但当在这个方法局部变量定义之前就引用这个变量,在Java和Scala的编译器里给出了不同的实现,先看Java里:
➜ cat B.java
public class B {
static String name = "noname";
public static void main(String[] args) {
System.out.println(name);
String name = "wang";
}
}
➜ java B
noname
在main方法里第一行引用的name是全局变量,在同名的局部变量定义之前它从全局查找这个变量。而在Scala里:
➜ cat A.scala
object A {
val name: String = "noname"
def main(args: Array[String]) {
println(name)
val name = "wang"
}
}
➜ scalac A.scala
A.scala:5: error: forward reference extends over definition of value name
println(name)
^
one error found
编译时错误,它优先从方法内部的局部变量表类查找了。我更接受Java里的方式,而且这种方式已经深入人心了,对Scala为何这样做我不清楚是出于什么考虑,是有意这样还是实现上的bug?
-
上一个: 浅谈 Websocket 和反向代理实践
-
下一个: Java命令行配置加载模块详解
相关文章
- 浅谈python内置变量-reversed(seq) 06-22
- java怎么使用其他class的变量?java如何在一个class中调用另一个class的变量? 02-18
- 谈谈java中变量命名规范的重要性 01-19
- 浅谈互斥锁为什么还要和条件变量配合使用 01-13
- java中成员变量与局部变量的区别 10-25
- ptyhon中salt state中使用判断、循环及变量 10-18