Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lua-如何使用字符串初始化表_Lua - Fatal编程技术网

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

lua-如何使用字符串初始化表,lua,Lua,我有以下字符串: mystring = "a=test;b=12345" 我想知道如何一次初始化一个表,给它赋值。该字符串来自另一个外部应用程序,如果可能的话,我希望避免将其拆分。大概是这样的: mytable = {mystring:gsub(";",",")} key value a 123 b 2345 有可能这样做吗?我知道如何分多个步骤来做。。。但我只是想知道是否有可能一次完成这一切 以下是我尝试的内容和相应的输出: > mystring

我有以下字符串:

 mystring = "a=test;b=12345"
我想知道如何一次初始化一个表,给它赋值。该字符串来自另一个外部应用程序,如果可能的话,我希望避免将其拆分。大概是这样的:

  mytable = {mystring:gsub(";",",")}
key   value
a       123
b       2345
有可能这样做吗?我知道如何分多个步骤来做。。。但我只是想知道是否有可能一次完成这一切

以下是我尝试的内容和相应的输出:

> 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
> 
而我希望最终得到一个数组/表,其中如下所示:

  mytable = {mystring:gsub(";",",")}
key   value
a       123
b       2345
返回:
123
456


正如所料。当然,这只适用于字母数字,没有标点符号。

试试这个,它让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

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

@lhf-事实上,它只对未定义的变量有效。修复了将所有变量转换为字符串的问题。
-- 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"}