내가 계층 구조 문자열을 테이블 형식으로 변환 할 수있는 방법이 있습니까? 테이블에 루아 계층 구조 문자열
는 입력A.B.C.D
OUPUT 입력 위에서 횡단 테이블이다되어야한다고 가정 A = {}
A.B = {}
A.B.C = {}
A.B.C.D = {}
감사.
내가 계층 구조 문자열을 테이블 형식으로 변환 할 수있는 방법이 있습니까? 테이블에 루아 계층 구조 문자열
는 입력A.B.C.D
OUPUT 입력 위에서 횡단 테이블이다되어야한다고 가정 A = {}
A.B = {}
A.B.C = {}
A.B.C.D = {}
감사.
확실한 해결책은 문자열을 구문 분석하고 그로부터 계층 구조 테이블을 구성하는 것입니다. 그러나 더 현명한 해결책은 루아가 당신을 위해 그것을하도록하는 것입니다. 메타 매직과 기능 환경 조작의 비트와 함께이 작업을 수행 할 수 있습니다
dump = require 'pl.pretty'.dump -- convenient table dumper from penlight
function createtable(str)
local env_mt = {}
env_mt.__index = function(t, k)
rawset(t, k, setmetatable({}, env_mt))
return rawget(t, k)
end
local env = setmetatable({}, env_mt)
local f = loadstring("return "..str)
setfenv(f, env)
f()
return env
end
dump(createtable "A.B.C.D")
이 출력 :
{
A = {
B = {
C = {
D = {
}
}
}
}
}
을 greatwolf의 대답 @ 잘하지만 난 문자열을 "구문 분석"의보다 직접적인 접근 방식을 선호 테이블 만들기. 덜 마술 적이며 사용자 정의 문자열에서로드 된 함수를 실행하지 않아 보안 문제가됩니다.
local createtable = function(str)
local top = {}
local cur = top
for i in str:gmatch("[^.]+") do
cur[i] = {}
cur = cur[i]
end
return top
end
(require "pl.pretty").dump(createtable("A.B.C.D"))
'로컬 TBL = "ABCD"'및 '(함수 (S, K) loadstring (S .. ('} ') 담당자 (K))() 단부) ((TBL .. ". ') : gsub ('%. ','= { '))' –