2011年2月9日 星期三

Rhino的f選項與命令列參數衝突與解決方法

在前一篇的「Rhino執行環境設定」的內容中提到使用「f」選項載入獨立的JavaScript程式碼檔案併執行,若只有載入JavaScript程式碼來執行,使用上並沒有問題。但是,如果要傳送命令列的參數時,卻出現了問題‧‧‧至少目前的Rhino 17R2的版本是有問題的‧‧‧

本機程式語言工具(例如C、Delphi等),如果開發的是Console型態的程式,那麼命令列(Command Line)參數就是應該具備的功能,讓程式可以依傳入參數的不同來決定運作的方式。Rhino自然也有考慮到這個需求,提供arguments預設屬性(Predefined Properties),用來取得命令列的(Command Line)參數。


直接舉例說明比較清楚,底下是用來將命令列參數進行加減乘除計算的程式碼:
/**
 *
 * Rhino arguments測試。
 *
 * @author ace
 *
 * @version 2011/02/08 v0.1
 *
 * @description
 *
 */

print(arguments[0] + " + " + arguments[1] + " = " + (Number(arguments[0]) + Number(arguments[1])));
print(arguments[0] + " - " + arguments[1] + " = " + (Number(arguments[0]) - Number(arguments[1])));
print(arguments[0] + " * " + arguments[1] + " = " + (Number(arguments[0]) * Number(arguments[1])));
print(arguments[0] + " / " + arguments[1] + " = " + (Number(arguments[0]) / Number(arguments[1])));
下圖是執行結果:


發現程式雖然可以載入執行,但執行結果已經不如預期。從執行結果發現程式取不到第二個參數(應該是5),而且最後還來個"系統找不到指定的檔案",可說是錯的嚴重。

至於解決方法很簡單,就是不要使用「f」選項,執行結果如下圖:


嗯~看起來這樣才是正解,使用「f」選項之後反而出錯,真是吃撐了@#$%‧‧‧而這樣的作法是參考「Scripting Java」這篇文章的這段說明"You can execute a JavaScript file by putting the file name as an argument to the shell class",才試著不使用「f」選項來合併,居然真的可行。如果有人也遇到同樣的狀況,可以參考這樣的作法。

補充說明,其實arguments是JavaScript程式語言本身既有的一個物件,配合Function物件可以用來取得傳入參數;雖然同樣是取得參數的功能,但在用途上並不相同,在使用Rhino的場合下要特別留意。

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...