コマンドライン引数

プログラミング言語 Luaコマンドライン引数を取得する方法を調べてみた。
http://d.hatena.ne.jp/eggman/20070918/1190122836

  • 引数はテーブル arg に格納されている。
  • テーブルの要素数は、#arg (長さオペレータ# + 変数名)で表す。
  • arg[0] には、ファイル名が格納されている。

面白いと思ったのは、引数指定がなければ arg の要素の数が 0 となる点。
自然な結果だけれど、arg は空ではない(arg[0] や arg[-1] には要素が入っている)から、結果が 2 になってもおかしくないと思ったから。

サンプル (arg.lua) :

 print("length = " .. #arg)
 for i = -1, #arg do
   print("arg[" .. i .. "] = " .. arg[i])
 end

実行結果:

 $ lua arg.lua
 length = 0
 arg[-1] = lua
 arg[0] = arg.lua

 $ lua arg.lua a b c
 length = 3
 arg[-1] = lua
 arg[0] = arg.lua
 arg[1] = a
 arg[2] = b
 arg[3] = c

Lua での長さとは、インデックス 1 から連続している要素数のこと。
インデックスが 0 以下や1から連続していない場合は、カウントの対象外になる。
この性質をうまく利用してるってことだね。