2017-03-08 40 views

回答

3

可以使用string.gmatch拆分它,那麼就打造你想要的表,試試這個:

local pprint = require('pprint') 

example="foo/bar/test/hello" 
v={} 
s=v 
for i in string.gmatch(example, "(%w+)") do 
    v[i]={} 
    v=v[i] 
end 

pprint(s) 

PS。爲了打印表格,我在這裏使用​​。

+0

謝謝你,它工作正常! – Ale32bit

1

遞歸是自然的使用工具。這是一個解決方案。爲了簡單起見,convert返回一個表。

S="foo/bar/test/hello" 

function convert(s) 
    local a,b=s:match("^(.-)/(.-)$") 
    local t={} 
    if a==nil then 
     a=s 
     t[a]={} 
    else 
     t[a]=convert(b) 
    end 
    return t 
end 

function dump(t,n) 
    for k,v in pairs(t) do 
     print(string.rep("\t",n)..k,v) 
     dump(v,n+1) 
    end 
end 

z=convert(S) 
dump(z,0) 

如果你真的需要設置一個全局變量foo,那麼這樣做結尾:

k,v=next(z); _G[k]=v 
print(foo) 
0

下面是另一個(非遞歸)可能性:

function show(s) 
    local level = 0 
    for s in s:gmatch '[^/]+' do 
    io.write('\n',(' '):rep(level) .. s .. ' = {') 
    level = level + 2 
    end 
    for level = level-2, 0, -2 do 
    io.write('}',level > 0 and ',\n' or '\n',(' '):rep(level-2)) 
    end 
end 

show 'foo/bar/test/hello'