The*_*aul 2 scala nullpointerexception scala-2.8
这段代码
v(2,1)
var m=Array[String]()
def v(f:Int,t:Int)=
{ var move= (10*f+t).toString
m :+ "21"
}
Run Code Online (Sandbox Code Playgroud)
(将其作为scala脚本运行)
执行m:+"21"行时给出空指针异常.
这个
var m=Array[String]()
def v(f:Int,t:Int)=
{ var move= (10*f+t).toString
m :+ "21"
}
v(2,1)
Run Code Online (Sandbox Code Playgroud)
作品.我认为两者都应该工作,这是一个编译器错误.还是我弄错了?
Scala 2.8.1,Windows XP
你错了:你试图在变量m初始化之前访问它.
请注意,仅仅因为其上的行在m"有问题"行之前(即抛出异常的地方)并不一定意味着它首先运行.
我创建了这个类(在创建它时表现出相同的行为):
class OrderTest {
foo(1)
val l = List("one", "two")
def foo(i : Int) = println(l(i))
}
Run Code Online (Sandbox Code Playgroud)
然后用-print选项编译:
class OrderTest extends java.lang.Object with ScalaObject {
private[this] val l: List = _;
<stable> <accessor> def l(): List = OrderTest.this.l;
def foo(i: Int): Unit = scala.this.Predef.println(OrderTest.this.l().apply(i));
def this(): test.OrderTest = {
OrderTest.super.this();
OrderTest.this.foo(1);
OrderTest.this.l = immutable.this.List.apply(scala.this.Predef.wrapRefArray(Array[java.lang.String]{"one", "two"}.$asInstanceOf[Array[java.lang.Object]]()));
()
}
}
Run Code Online (Sandbox Code Playgroud)
你可以很清楚地看到发生了什么
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |