lua - 如何使用字符串初始化表

Hap*_*ays 4 lua

我有以下字符串:

 mystring = "a=test;b=12345"
Run Code Online (Sandbox Code Playgroud)

我想知道如何一次初始化一个表,给它分配字符串的值.该字符串源自另一个外部应用程序,如果可能,我希望避免必须将其拆分.像这样的东西:

  mytable = {mystring:gsub(";",",")}
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?我知道如何在多个步骤中完成它...但只是想知道是否可以一次完成所有操作.

这是我尝试过的和相应的输出:

> mystring = "a=123;b=2345"
> myarray = {mystring:gsub(";",",")}
> for key,value in pairs(myarray) do print(key,value) end
1   a=123,b=2345
2   1
> 
Run Code Online (Sandbox Code Playgroud)

而我希望最终得到一个像这样的数组/表:

key   value
a       123
b       2345
Run Code Online (Sandbox Code Playgroud)

lhf*_*lhf 5

试试这个,这让Lua做了很多努力:

function parse(s)
    local t={}
    load(s,"",nil,t)()
    return t
end

mytable=parse("a=123;b=2345")
for k,v in pairs(mytable) do print(k,v) end
Run Code Online (Sandbox Code Playgroud)

请注意,这会执行给定字符串中的代码,如果它来自不受信任的来源,则可能会有危险.另一方面,损坏是有限的,因为代码在空的环境中执行,因此不会影响现有的变量.但是,恶意代码可能包含无限循环或占用所有内存.


Ego*_*off 5

-- Lua 5.2+ required
function string_to_table (str)
   local result = {}
   load(str, '', 't', setmetatable({}, {
      __index = function(t,k) return k end,
      __newindex = result
   }))()
   return result
end

mytable = string_to_table("a=test;b=12345;c=a")  -- {a="test", b=12345, c="a"}
Run Code Online (Sandbox Code Playgroud)