スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Luaで関数の引数の名前を取得

Luaの関数の引数の名前を取得する関数。
注意点:
  • 最後が可変長引数だった場合は、名前の代わりに true が入る
  • luac で strip されていたら取得できない
  • Luaの実装にかなり依存している(可変長引数が arg という名前の引数になってることとか)
  • 関数の中身が空だと取得できない
  • すでにフックが設定されていたら上書きしてしまう
luac -l -l で引数の個数とローカル変数の名前が見れるんだけど、それをLuaのコードから取得できないのが残念。
function getparameternames(f)
  if debug.getinfo(f,"S").what == "Lua" then
    local t = {}
    local function myhook(event)
      debug.sethook()
      for i = 1,math.huge do
        local n = debug.getlocal(2,i)
        if not n or string.match(n,"^%(.*%)$"then
          break
        end
        t[i] = n
      end
      if t[#t] == "arg" then
        t[#t] = true
      end
      error("*HOOK*",0)
    end
    local e,m = pcall(function(f,hook)
      debug.sethook(hook,"c")
      f()
    end,f,myhook)
    assert(not e)
    if m == "*HOOK*" then -- m:find("*HOOK*",nil,true)
      return t
    else
      error(m,0)
    end
  else
    return {true}
  end
end
スポンサーサイト

テーマ : プログラミング | ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。