Как я могу получить ссылку на индекс таблицы? (lua)

Я хочу получить ссылку на что-то в таблице, но когда я пытаюсь:

myReferences[x] = table[i]

Копирую значение. Я попытался использовать переменную между таблицами:

local myReference = table[i]
myReferences[x] = myReference

но это тоже не работает

Заранее спасибо :)


person jay    schedule 11.10.2018    source источник
comment
Что вы действительно пытаетесь сделать?   -  person lhf    schedule 11.10.2018
comment
Эта проблема невозможна, поскольку Lua строго передается по ссылке (по крайней мере, семантически, а не под капотом). Кроме того, если значение равно нулю, логическому значению, числу или строке, то оно неизменяемо, поэтому копирование и ссылка в любом случае не будут иметь значения. Если Влад правильно догадался, что вы пытаетесь получить ссылку в стиле C++, то в Lua просто нет такой возможности.   -  person luther    schedule 11.10.2018


Ответы (1)


В Lua нет «ссылки». Когда вы что-то присваиваете, это только привязывает новое значение к переменной или к элементу таблицы.

Если вам нужна ссылка на элемент таблицы, вам нужна сама таблица и значение ссылочного индекса, хранящиеся вместе. Эта пара будет вашим эквивалентом для справки. Для удобства его можно обернуть каким-нибудь функциональным объектом, но по сути это будет одна и та же пара.

Но, как отмечено в комментариях, вполне вероятно, что вы пытаетесь решить какую-то другую задачу в стиле С++, поэтому вам лучше объяснить, чего вы пытаетесь достичь.

person Vlad    schedule 11.10.2018
comment
There is no "reference" thing in Lua. На самом деле в Lua есть эталонная штука. Обычно его называют upvalue :-) Upvalue — это ссылка на переменную в куче. К сожалению, ссылка на какой-то внутренний элемент (такой как значение внутри таблицы) действительно не существует в Lua. - person Egor Skriptunoff; 12.10.2018
comment
@EgorSkriptunoff, верно, значение upvalue ссылается на другую переменную. Спасибо за исправление :) - person Vlad; 12.10.2018