在Lua中用字符串和值生成变量名



是否有一个函数在Lua生成一个字符串和一个值的变量名?

例如,我有第一个(字符串)部分"vari"和第二个(值)部分,它们可以变化。我想生成"vari1""vari2""vari3"等等。像这样:"vari"..value = 42应该是vari1 = 42

感谢

是的,但这很可能是一个坏主意(这对我来说似乎是一个xy问题)。如果你需要一个枚举的"列表";对于变量,只需使用一个表:

local var = { 42, 100, 30 }
var[4] = 33 -- add a fourth variable
print(var[1]) -- prints 42

如果你真的需要设置一堆变量虽然(也许坚持一些奇怪的API?),我建议使用("..."):format(...),以确保您的变量将被格式化为var<int>,而不是var1.0,var1e3或类似的。

Lua中的环境-全局环境_G和脚本环境_ENV(在Lua 5.2中),通常是全局环境,只是表最后,你可以像写和读表一样写和读它们:

for value = 1, 3 do
_ENV[("vari%d"):format(value)] = value^2
end
print(var3) -- prints 3*3 = 9
-- verbose ways of accessing var3:
print(_ENV.var3) -- still 9
print(_ENV["var"]) -- 9 as well

请注意,这很可能只是对脚本环境的污染(可能是全局污染),这被认为是一种不好的做法(通常对性能不利)。请概述您的实际问题,并考虑使用列表方法。

是。电话:

rawset(table, key, value)

的例子:

rawset(_G, 'foo', 'bar')
print(foo)
-- Output: bar
-- Lets loop it and rawget() it too
-- rawset() returns table _G here to rawget()
-- rawset() is executed before rawget() in this case
for i = 1, 10 do
print(rawget(rawset(_G, 'var' .. i, i), 'var' .. i))
end
-- Output: 10 lines - First the number 1 and last the number 10

见:https://lua.org/manual/5.1/manual.html pdf-rawset

把这些放在一起,创建一个自己的函数…

function create_vars(var, start, stop)
for i = start, stop do
print(var .. i, '=>', rawget(rawset(_G, var .. i, i), var .. i))
end
end

使用它…

> create_vars('var', 42, 42)
var42   =>  42
> print(var42)
42

最新更新