教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 java中scala变量查找的问题

java中scala变量查找的问题

发布时间:2016-10-10   编辑:jiaochengji.com
教程集为您提供java中scala变量查找的问题等资源,欢迎您收藏本站,我们将为您提供最新的java中scala变量查找的问题资源
下面我们一起来看一篇关于java中scala变量查找的问题了,对于java中scala变量查找我们可以通过这篇文章学到更多的内容。


在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?

您可能感兴趣的文章:
java中scala变量查找的问题
scala与python区别有哪些
Scala学习笔记之测试异常
对比scala,用javascript实现 特质(trait) 的部分特性
NATS—基础介绍
对比scala,用javascript实现curried方法
为什么大部分程序员看不起php语言?
java 中 if (someobject != null) 检查对象是否为空的问题
经典Java线程面试题70道
Java基础篇:反射机制详解

[关闭]
~ ~