*Luaライブラリ 要注意点 ~Debugライブラリ~ [#f8545427] **os.clock [#c80aef1d] >osライブラリのclockはベンチマークデバッグに利用できるので、osライブラリではなく、あえて、こちらに入れておく。 #sh(lua;){{ local x = os.clock() -- この行に来た瞬間のCPU時間 local s = 0 for i=1, 100000 do s = s + i end print(string.format("elapsed time: %.2f\n", os.clock()-x )) }} - debug.getinfo ([thread,] f [, what]) >関数に関する情報を格納したテーブルを返します。~ f の値として、''関数を直接渡すか、 数値を指定''することができます。~ ''数値は指定したスレッドのコールスタック上で実行中のレベル f の関数を表します。~ レベル 0 は現在の関数 (getinfo 自身) で、レベル 1 は getinfo を呼んだ関数で、以下同様です。''~ (スタックにカウントされない末尾呼び出しを除きます)。そうでなければ、date は現在時刻を書式化する。~ format が `!´ で始まっていたら、日付は世界時 (Universal Time) で書式化される。~ このオプション文字の後、 format が *t であれば、 date は以下のフィールドを持つテーブルを返す。~ ~ |プロパティ|意味| |source|関数の定義位置。| |short_source|sourceの短縮形。(今ひとつ存在意義は謎) | |linedefined|該当関数が定義されている行| |lastlinedefined|該当関数が定義されている最後の行| |what|関数の種類。"Lua"か"C"、メインチャンクの場合は"main"~ debug.getinfo(print).what --> "C"~ debug.getinfo(myfunc).what -->"Lua"~ ~ i = loadstring("return 3")~ debug.getinfo(i).what --> "main"~ |name|関数の妥当と思われる名前。数値を指定してgetinfoを呼び出した場合のみ機能する。| |namewhat|nameフィールドの種類。対象の関数が何者か。"global", "local", "method", "field", ""(空文字)| |nups|関数が持つ上位値の数。レベルと関連。| |activelines|関数のアクティブ行の集合のテーブル。デバッガでも作らない限り、まぁあまり気にしなくても良い。| |func|関数自身。| |これだけだと、一見無意味に思えるが、該当レベルで関数がアクティブだったらここに入るというフィルターがかかっている。| #sh(lua;){{ print(os.getenv("PATH")) --> C:\~~;~~ }} **exit [#y8a52a7a] > #sh(lua;){{ os.exit ([code]) }} 省略可能な code(整数値) でCの関数 exit を呼んでホストプログラムを終了させる。~ code のデフォルト値は成功を表すコードである。 **os.execute [#nf417456] >外部プログラム実行(他言語のsystem関数系に相当する。コンソール窓が出てしまうので、~ shell.execute関数(コンソールが出ないもの)を別途C層で用意したほうが良い。 **io.popen [#a318ed37] >osライブラリではないが、os.systemのより便利版として利用できる。いわゆるperlの`(cmd_string)`と同じである。 #sh(lua;){{ for dir in io.popen("dir " .. "C:\\" .. " /b /aa"):lines() do print(dir) end }} **ファイル操作等 [#z4cceac9] -os.remove (filename) ファイルの削除 >指定された名前のファイルまたはディレクトリを消す。~ 対象がディレクトリの場合、ディレクトリ内は空でなければならない。 (※まぁよくあるやつですよ。よって中にあるファイルを消してからディレクトリを消す。~ というのを下層ディレクトリから上層へと再帰的に行う必要がある。)~ この関数が失敗した場合は nil とエラーメッセージを返す。 #sh(lua;){{ sample dir = "..." os.remove(dir) }} ~ -os.rename (oldname, newname) ファイル名変更 >ファイル(ディレクトリ)名 oldname を newname にリネームする。~ この関数が失敗した場合は nil とエラーメッセージを返す。~ #sh(lua;){{ f_old = "..." f_new = "..." os.rename(f_old, f_new) }}