我遇到了一个问题,看起来它可能是Nashorn引擎中的某种错误,但我想不出一个好方法来提取一个测试用例来演示它。
我有一段代码(以前是可以工作的!)大致如下所示:
'use strict';
function Dummy() {
this.val = 'I am fubar';
this.aContainer = [];
}
Dummy.prototype.toString = function() { return JSON.stringify(this);};
let obj = {};
obj.aMethod = function(arg) {
let fubar = new Dummy();
print('Okay so far');
fubar.aContainer.push({"some":"thing"});
print('Still okay');
fubar.aContainer.push({"==": [{"var": "something_else"}, fubar.val]});
return fubar;
};
print(obj.aMethod(null));
jss --language=es6 -strict
不会崩溃。然而,在我的真实代码中,我得到了以下信息:
jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "fubar" is not defined
如果我按以下方式更改代码,它运行良好:
'use strict';
function Dummy() {
this.val = 'I am fubar';
this.aContainer = [];
}
Dummy.prototype.toString = function() { return JSON.stringify(this);};
let obj = {};
obj.aMethod = function(arg) {
let fubar = new Dummy();
print('Okay so far');
fubar.aContainer.push({"some":"thing"});
print('Still okay');
let x = fubar.val;
fubar.aContainer.push({"==": [{"var": "something_else"}, x]});
return fubar;
};
print(obj.aMethod(null));
我刚刚通过自动更新获得了一个新版本的Java,但我需要看看这段代码是否在其下运行。我当前在控制台上的版本是:
â ~ java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)