4
我正在嘗試使用由Java Nashorn Engine(JDK 8)編譯和評估的JavaScript文件中的,__LINE__
和__FILE__
Nashorn全局變量。爲什麼Java Nashorn __DIR__,__LINE__和__FILE__爲空?
然而,所有的人都返回NULL ...
他們是否涉及到一些具體的犀牛配置或?它沒有在documentation中說明任何其他配置使它們工作。
我正在嘗試使用由Java Nashorn Engine(JDK 8)編譯和評估的JavaScript文件中的,__LINE__
和__FILE__
Nashorn全局變量。爲什麼Java Nashorn __DIR__,__LINE__和__FILE__爲空?
然而,所有的人都返回NULL ...
他們是否涉及到一些具體的犀牛配置或?它沒有在documentation中說明任何其他配置使它們工作。
這是因爲您可能已將腳本作爲字符串加載。大多數的例子是這樣的:
engine.eval(new FileReader("scripts/hello.js"));
時發動機不知道,在這個腳本是從哪裏來的,因爲它只是變得從的FileReader的響應。這就像打電話engine.eval("print('hello')")
,沒有文件,只是一個字符串。
如果您從控制檯調用腳本,使用jjs
,則它們將被正確填充。
從Java實現這一目標,我目前只看到一葷一:保存文件路徑在上下文字符串和JS訪問此:
ScriptContext ctx = engine.getContext();
ctx.getBindings(ScriptContext.GLOBAL_SCOPE).put("thisFile", script);
engine.eval(new FileReader(script), defCtx);
的JS:
print("I am " + thisFile);
輸出:
I am resources/test.js
注意:但它是可能的,因爲jdk.nashorn.tools.Shell
能夠設置一個jdk.nashorn.internal.runtime.Context
,這是在全局數組中設置的。
適用於我...你怎麼援引Nashorn?請注意,如果'jjs'正在從stdin讀取,'__DIR__'爲空。 –
我正在使用Java的Nashorn。評估'CompiledScript'對象。 –