아래 스크립트의 출력은 다음과 같습니다루아에서 키 값을 가진 테이블을 어떻게 참조합니까?
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