是否有一个函数在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