以下のスクリプトの出力は次のとおりです。ルアで数値のキー値を持つテーブルをどのように参照していますか?
AD[1] = [variable not found]
AD['2'] = bar
どのように私は両方のケースのためにVの値を返すために、関数のgetFieldを変更することができますか?
function getfield (f)
local v = _G
for w in string.gfind(f, "[%w_]+") do
v = v[w]
end
return v
end
AD = {[1] = 'foo', ['2'] = 'bar'}
data = {"AD[1]","AD['2']"}
for i,line in ipairs(data) do
s = getfield(line)
if s then
print(line .. " = " .. s)
else
print(line .. " = [variable not found]")
end
end
UPDATE: 私は90%確信している、これは私のために仕事に行くされています
function getfield (f)
local v = _G
for w in string.gfind(f, "['%w_]+") do
if (string.find(w,"['%a_]")==nil) then
w = loadstring('return '..w)()
else
w = string.gsub(w, "'", "")
end
v=v[w]
end
return v
end
何が失敗するのでしょうか? – shaun5
「脆弱性の種類」という言葉の補遺を参照してください。 –
シナリオが失敗することはありません。私は思った:AD = {[1] = 'foo'、['1'] = 'foobar'、['2'] = 'bar'}はそれをするだろうが、まだ動作します..シナリオは何ですか? – shaun5