問題が発生した関数を知らせる lua テスト フレームワークをまとめようとしていますが、loadstring から に切り替えたときに_G
(テスト ハーネスが関数呼び出しの結果を確認できるように切り替えました)、関数が使用し始めました。関数名の「nil」
_G
次のコードで現在の関数の名前を検出できないのはなぜですか? また、loadstring からの戻り値 (つまり、blah 呼び出しからの「false」) を取得したり、使用時に関数名を設定したりするに_G
はどうすればよいですか (つまり、lua インタープリターに関数名を教えてください)。
function run_test(one, two)
if one ~= two then
print(debug.getinfo(2).name..' Failed')
end
end
function blah()
run_test(false, true)
return false
end
local fname = 'blah'
local status, result = pcall(_G[fname]) -- Outputs 'nil'; result is 'false'
local status, result = pcall(loadstring(fname..'()')) -- Outputs 'blah', result is 'nil'
私が必要とする主なものは、関数名の文字列を使用して関数を呼び出す方法であり、呼び出し内の関数名を確認できるようにすることです (テストの失敗のために、関数の fname = 'blah' のように、失敗した関数を指すようにします)。上記のコード) 戻り値を取得できるようにする
local fname = 'blah'
status, result = pcall(??Call fname somehow??)
assert(status)
assert(not result)
--stdout should be "blah Failed"