特定の状況下で nil 値を取得できる関数foo
があります。つまりfoo(VarA)
whileVarA
は未定義です。この未定義VarA
は解釈されるはずですが、オプション パラメータとして機能する必要があるため、"VarA"
呼び出すことができません(通常の文字列パラメータとは異なります)。foo("VarA")
VarA
mt = {__index = function(t, k) return k end}
setmetatable(_G, mt)
これで目的の結果が得られますが、他のすべての未定義変数はその名前を返します。のようにabc -> "abc"
。この特定のケースでメタテーブルのみをアクティブにする方法はありますか? foo
メソッドでメタテーブルを切り替えることができましたが、foo
ブロックにいるとき、渡されたパラメーターはすでに nil であり、遅すぎます。
付録: 質問が具体的ではなかったと思います。パラメータをテーブルとして渡すScholliiの答えは良かったが、意図したとおりに機能しない:
foo({option1 = delete, option2 = push})
これには、キー情報 (オプション 1 とオプション 2) と値の情報が含まれている必要があります (削除とプッシュがグローバルまたはローカル名前空間に存在しない場合でも)。Schollii のアプローチでは、重要な情報は得られますが、値の情報 (「削除」や「プッシュ」など) は得られません。これらの新しい「キーワード」は後で関数自体によって定義される必要があるため、削除とプッシュを事前に定義することはできません。これらの新しいキーワードを文字列として渡すことはできません。