Вы ошибаетесь: вы пытаетесь получить доступ к переменной 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]]()));
()
}
}
Вы можете очень ясно видеть, что происходит