前回の投稿で、Windows のコマンドプロンプトから「test」[Enter] と入力すると、test.fsx が fsi.exe に読み込まれて実行されるよう設定する手順を説明した。
しかしながら、一点、大事なことを書き忘れていたので補足する。
F# スクリプトでのコマンドライン引数の取得
F# スクリプトでは、コマンドライン引数は fsi.CommandLineArgs という配列によって取得できる。
しかし、コマンドプロンプトから次のように実行してみると...
>echo printfn "Hello, %s." fsi.CommandLineArgs.[1] > test2.fsx
>test2 F#
残念ながら、fsi.CommandLineArgs は1要素しかないが故の、配列添え字が範囲外との例外となってしまう。
つまり、コマンドライン引数がうまく F# スクリプトに渡されていないのだ。
そこで、この点を改善すべく、再びレジストリ設定を変更する。
レジストリ設定の修正
レジストリエディタを起動し、まずは HKEY_CLASSES_ROOT\VisualStudio.fsx.11.0\shell\openRunFsi\command キーを開く。
ここに、fsi.exe を起動するコマンドが記述されている。
"(Default)" の値を編集し、いちばん末尾に「%*」と追記すれば OK。
以上で「test2 F#」[Enter] と入力すれば、「Hello, F#」というように、コマンドライン引数を取得して表示されるようになる。