从 Lua 中的表达式中提取变量
Extracting variables from expression in Lua
我在 lua 中有表达式,其中包含标准元 table 操作 .__add,.__sub,.__mul, (+,-,*)
例如 a+b*xyz-cde
我正在尝试提取 table 中的所有自由变量。对于此表达式,table 将包含 {a,b,xyz,cde}
。现在我正在尝试使用字符串操作,如拆分、替换等。这似乎可行,但我觉得它很丑陋。它变得有点复杂,因为表达式中可能涉及嵌套和括号。例如,表达式 (a+b)-c*xyz*(a+(b+c))
应该 return table {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
此代码在空环境中计算表达式,其中每个变量的值为零,将表达式中变量的名称保存在 table.
中
我在 lua 中有表达式,其中包含标准元 table 操作 .__add,.__sub,.__mul, (+,-,*)
例如 a+b*xyz-cde
我正在尝试提取 table 中的所有自由变量。对于此表达式,table 将包含 {a,b,xyz,cde}
。现在我正在尝试使用字符串操作,如拆分、替换等。这似乎可行,但我觉得它很丑陋。它变得有点复杂,因为表达式中可能涉及嵌套和括号。例如,表达式 (a+b)-c*xyz*(a+(b+c))
应该 return table {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
此代码在空环境中计算表达式,其中每个变量的值为零,将表达式中变量的名称保存在 table.
中