Использование таблицы для имени переменной в таблице не найдено при вызове для - PullRequest
0 голосов
/ 13 января 2019

Я делаю довольно сложную вещь, и я пытаюсь использовать таблицы в качестве имен переменных, потому что я обнаружил, что lua работает с ним, то есть:

lua
{[{1,2}]="Meep"}

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

Я пытался найти его и тому подобное, но понятия не имею, почему он этого не сделает.

ua
local c = {[{1,2}]="Meep"}
print(c[{1,2}],c)

Ожидаю ли я стать, но это не так.

"Meep",{[{1,2}]="Meep"}

но я получаю

nil,{[{1,2}]="Meep"}

Если я, однако, попробую

lua
local m={1,2}
local c = {[m]="Meep"}
print(c[m],c)

это становится правильным, есть ли способ избежать этого среднего человека? В конце концов m=={1,2} вернет истину.

1 Ответ

0 голосов
/ 13 января 2019

Ваша проблема в том, что таблицы в lua представлены как ссылки . Если вы сравниваете два разных тальба, вы сравниваете эти ссылки. Таким образом, уравнение получает true, только если приведенные таблицы точно такие же.

t = { 1, 2, 3 }
t2 = { 1, 2, 3 }
print(t == t) -- true
print(t2 == t) -- false
print(t2 == t2) -- true

Из-за этого вы можете передавать их в функции для каждой ссылки.

function f(t)
    t[1] = 5
end

t2 = { 1 }
f(t2)
print(t2[1]) -- 5

Чтобы обойти это поведение, вы можете (как предложено в комментариях) сериализовать таблицу перед использованием ее в качестве ключа.

...