Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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
String 从Lua中的表达式中提取变量_String_Lua_Lua Table_Evaluate - Fatal编程技术网

String 从Lua中的表达式中提取变量

String 从Lua中的表达式中提取变量,string,lua,lua-table,evaluate,String,Lua,Lua Table,Evaluate,我有lua中的表达式,其中包含标准的元表操作。\uuuu-add、.uuuu-sub、.uuu-mul、(+,-,*) 例如a+b*xyz cde我试图提取表中的所有自由变量。对于这个表达式,表将包含{a,b,xyz,cde}。现在我正在尝试使用字符串操作,如拆分、替换等。这似乎有效,但我觉得这是一种丑陋的方式。因为表达式中可能涉及嵌套和括号,所以它不会变得复杂。例如,表达式(a+b)-c*xyz*(a+(b+c))应该返回表{a,b,c,xyz}。有没有一种简单的方法可以提取表达式中的自由变量

我有lua中的表达式,其中包含标准的元表操作
。\uuuu-add、.uuuu-sub、.uuu-mul、(+,-,*)

例如
a+b*xyz cde
我试图提取表中的所有自由变量。对于这个表达式,表将包含
{a,b,xyz,cde}
。现在我正在尝试使用字符串操作,如拆分、替换等。这似乎有效,但我觉得这是一种丑陋的方式。因为表达式中可能涉及嵌套和括号,所以它不会变得复杂。例如,表达式
(a+b)-c*xyz*(a+(b+c))
应该返回表
{a,b,c,xyz}
。有没有一种简单的方法可以提取表达式中的自由变量?我甚至在寻找使用字符串库的简单方法

如果要进行字符串处理,很容易:

local V={}
local s="((a+b)-c*xyz*(a+(b+c)))"
for k in s:gmatch("%a+") do
    V[k]=k
end
for k in pairs(V) do print(k) end
为了好玩,你可以让Lua做艰苦的工作:

local V={}
do
    local _ENV=setmetatable({},{__index=function (t,k) V[k]=k return 0 end})
    local _=((a+b)-c*xyz*(a+(b+c)))
end
for k in pairs(V) do print(k) end

此代码在空环境中对表达式求值,其中每个变量的值都为零,并将表达式中变量的名称保存在表中。

听起来您这样做是正确的。如果您包含当前用于执行此操作的代码,我们可能会说您可以如何改进它。您为什么要这样做?