क्या कोई तरीका है कि मैं पदानुक्रम स्ट्रिंग को तालिका रूप में परिवर्तित कर सकता हूं?लुआ पदानुक्रम स्ट्रिंग तालिका
मान लीजिए इनपुट 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 = {}
धन्यवाद।
स्पष्ट समाधान स्ट्रिंग को पार्स करना और उस से पदानुक्रम तालिका बनाना होगा। लेकिन एक और चालाक समाधान है कि लुआ इसे आपके लिए करने दें। metamagic और समारोह वातावरण में गड़बड़ी का एक सा के साथ यह किया जा सकता है:
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 .. '। '): gsub ('%। ',' = {')) ' –