2012-09-17

最近のRhinoはjava.lang.System.inと書ける

Rhino1.7R4をダウンロードしてみたところ、 "in"というプロパティ名をドット記法で書けるようになっていた。
Rhino1.6R7やjrunscript(Java1.7)で同じ書き方をするとエラーになるので、 もし複数の環境に対応したスクリプトを書こうとしている場合は注意が必要だ。

1. 実行するスクリプト(system-in.js):
print(java.lang.System["in"]);
print(java.lang.System.in);

2-1. Rhino1.7R4で実行すると、プロパティ名がinでもエラーにならない:
>java -classpath .;js.jar org.mozilla.javascript.tools.shell.Main -w -debug system-in.js
java.io.BufferedInputStream@110b205
java.io.BufferedInputStream@110b205

2-2. Rhino1.6R7で実行した場合、プロパティ名inをドット記法で書いている箇所がエラーになる:
>java -classpath .;js.jar org.mozilla.javascript.tools.shell.Main -w -debug system-in.js
js: "system-in.js", line 2: missing name after . operator
js: print(java.lang.System.in);
js: .........................^
js: "system-in.js", line 1: Compilation produced 1 syntax errors.

2-3. jrunscript(Java1.7)で試した場合、Rhino1.6R7と同様のエラーが発生する:
>jrunscript system-in.js
script error in file system-in.js : sun.org.mozilla.javascript.internal.EvaluatorException: missing name after . operator (system-in.js#2) in system-in.js at line number 2

0 件のコメント:

コメントを投稿