Why would a variable in Scala code mysteriously become null?
- by Alex R
I've isolated the problem down to this:
Predef.println("the value of argv1 here is " + argv(1));
var n: $ = undef;
n = argv(1);
Predef.println("the value of argv1 here is " + argv(1));
Predef.println("the value of n here is " + n);
Predef.println("the class of n here is " + n.getClass);
Here's the definition of $:
class $ {
println("constructed a new $ of type: " + this.getClass);
def value: $ = this;
def toValue: Value = { new ConstStringValue(this.toString()) };
def -(sym: Symbol): $ = { println("looked up: " + sym); this }
def -(sym: $): $ = { println("looked up: " + sym); this }
def update(sym: Symbol, any: Any) {
println("update called: " + sym + "=" + any);
}
def apply(sym: Symbol) = { this }
def apply(obj: $) = { this }
def apply() = { this }
def +(o:$) = this.toValue.div(o.toValue)
def *(o:$) = this.toValue.mul(o.toValue)
def >(o:$) = this.toValue.gt(o.toValue)
def <(o:$) = this.toValue.lt(o.toValue)
def ++() = { this }
def -=(o:$) = { this }
}
When run, the code prints:
the value of argv1 here is 10
the value of argv1 here is 10
the value of n here is null
java.lang.NullPointerException
at test_1_php$.include(_tmp.scala:149)
at php.script.main(php.scala:57)
at test_1_php.main(_tmp.scala)
[...]
Why would n mysteriously lose its value (or fail to take one on)?