清單 3 顯示了兩個有關的方法:defineScriptFunction() 和 invokeScriptFunctionFromEngine()。defineScriptFunction() 方法還使用一段硬編碼的 JavaScript 代碼調用腳本引擎的 eval() 方法。但是有一點需要注意,該方法的所有工作只是定義了一個 JavaScript 函數 sayHello()。并沒有執行任何代碼。sayHello() 函數只有一個參數,它會使用 println() 語句將這個參數輸出到控制臺。腳本引擎的 JavaScript 解釋器將這個函數添加到全局環境,以供后續的 eval 調用使用(該調用發生在 invokeScriptFunctionFromEngine() 方法中,這并不奇怪)。
清單 3. defineScriptFunction 和 invokeScriptFunctionFromEngine 方法
private static void defineScriptFunction(ScriptEngine engine) throws ScriptException {
// Define a function in the script engine
engine.eval(
"function sayHello(name) {" +
" println('Hello, ' + name)" +
"}"
);
}