Lua аргумент в качестве имени строки - PullRequest
1 голос
/ 12 августа 2011

У меня есть такая строка:

local tempStr = "abcd"

и я хочу отправить переменную с именем abcd в функцию, подобную этой:

local abcd = 3

print( tempStr ) -- not correct!!

и результат будет 3, а не abcd.

Ответы [ 3 ]

2 голосов
/ 12 августа 2011

Вы можете сделать это с локальными переменными, если вы используете таблицу вместо «простой» переменной:

local tempStr = "abcd"

local t = {}

t[tempStr] = 3

print( t[tempStr]) -- will print 3
1 голос
/ 12 августа 2011

Функция 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")) -- will print "b!"
end

g()
1 голос
/ 12 августа 2011

Вы не можете сделать это с переменными, объявленными как local.Такие переменные являются просто адресами стека;они не имеют постоянного хранилища.

То, что вы хотите сделать, это использовать содержимое переменной для доступа к элементу таблицы.Который, конечно, может быть глобальной таблицей.Для этого вы должны сделать:

local tempStr = "abcd"
abcd = 3 --Sets a value in the global table.
print(_G[tempStr]) --Access the global table and print the value.

Вы не сможете сделать это, если объявите abcd как локальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...