将Lua参数作为字符串名称。

我有一个字符串:

local tempStr = "abcd"

我想把变量名为"abcd"的变量发送到一个函数中,就像这样:

local abcd = 3

print (tempStr) - 不正确!!

结果将是3,而不是abcd。

原文链接 https://stackoverflow.com/questions/7036750

点赞
stackoverflow用户734069
stackoverflow用户734069

你无法使用声明为local的变量进行这样的操作。这些变量只是堆栈地址,它们没有永久存储。

你想要做的是使用变量的内容来访问表中的一个元素。当然可以是全局表。要做到这一点,你可以这样做:

local tempStr = "abcd"
abcd = 3 --在全局表中设置一个值。
print(_G[tempStr]) --访问全局表并打印值。

如果你把abcd声明为local,你就不能这样做了。

2011-08-12 07:37:36
stackoverflow用户312586
stackoverflow用户312586

如果使用表而非“plain”变量,则可以使用本地变量来实现:

local tempStr = "abcd"

local t = {}

t[tempStr] = 3

print(t[tempStr]) —将打印3
2011-08-12 11:51:18
stackoverflow用户892278
stackoverflow用户892278

函数debug.getlocal可以帮助你。

function f(name)
    local index = 1
    while true do
        local name_,value = debug.getlocal(2,index)
        if not name_ then break end
        if name_ == name then return value end
        index = index + 1
    end
end

function g()
    local a = "a!"
    local b = "b!"
    local c = "c!"
    print (f("b")) -- 将打印 "b!"
end

g()
2011-08-12 19:23:39