gpt4 book ai didi

scala - (不是)Scala 编译器错误? (空指针异常)

转载 作者:行者123 更新时间:2023-12-03 02:58:19 25 4
gpt4 key购买 nike

这段代码

v(2,1)  
var m=Array[String]()
def v(f:Int,t:Int)=
{ var move= (10*f+t).toString

m :+ "21"

}

(作为 scala 脚本运行)

执行 m:+ "21"行时出现空指针异常。

这个

var m=Array[String]()
def v(f:Int,t:Int)=
{ var move= (10*f+t).toString

m :+ "21"

}
v(2,1)

有效。我认为两者都应该有效,这是一个编译器错误。还是我错了?

Scala 2.8.1、Windows XP

最佳答案

您错了:您试图在变量 m 初始化之前访问它。

请注意,仅仅因为带有 m 的行位于“有问题的”行(即引发异常的位置)之前,并不一定意味着它首先运行。

我创建了这个类(当您创建它时它表​​现出相同的行为):

class OrderTest {
foo(1)
val l = List("one", "two")
def foo(i : Int) = println(l(i))
}

然后使用-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]]()));
()
}
}

你可以清楚地看到发生了什么

关于scala - (不是)Scala 编译器错误? (空指针异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com