問題が発生した関数を知ることができるルアテストフレームワークをまとめようとしていますが、loadstringから_G
私のテストハーネスは関数呼び出しの結果を見ることができました)私の関数は関数名に 'nil'を使い始めましたdebug.getinfo(1)に 'name'が指定されていないのはなぜですか?
_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 =上記のコードで「何とか」)と、戻り値
local fname = 'blah'
status, result = pcall(??Call fname somehow??)
assert(status)
assert(not result)
--stdout should be "blah Failed"
'pcall'がC土地に入り、スタック上の関数値にこの文脈で関連するシンボリック名がないので、それは可能でしょうか? – greatwolf
どちらの行もpcallを使用しています。さらに、ロードストリングが_Gより動的な "より動的"なので、逆のことです。 –
はい、2行目は 'blah'よりも無名関数をラップする効果があり、これがルアランドに戻ります。 – greatwolf