2013-03-03 2 views
0

У каждого объекта есть ссылка, с которой может быть связана переменная, правильно?Что представляют собой «ссылки» на объекты в Lua?

Как выглядят эти ссылки? Это то, что вы получаете, когда печатаете (таблица1)?

0x100108fb0 например?

Если да, существует ли функция, которая может отображать ссылку на более примитивные типы, такие как строка и номер?

ответ

4

Не путайте объекты, ссылки и переменные.

Цитируя Lua 5.2 Reference Manual:

таблицы, функции, потоки, и их значения (полное) USERDATA объекты: переменные фактически не содержат эти значения, только ссылки на них.

Так что если значение переменной имеет тип nil или номер, переменная на самом деле содержит ее, а не только ссылается на нее. С этими типами нет ссылок. Я не знаю, почему строки остались в приведенной выше цитате из справочного руководства; возможно, потому что строки неизменяемы, для программиста Lua не имеет значения, содержат ли переменные строки-ссылки или -значения. Однако технически - с точки C - строки ссылаются на переменные, которые не содержатся.

Ссылка - это просто указатель, адрес ссылочного объекта в памяти. При печати в виде шестнадцатеричного числа он действительно «выглядит» как 0x100108fb0.

Если да, существует ли функция, которая может отображать ссылку на более примитивные типы, такие как строка и номер?

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

Возможно, вы также захотите прочитать соответствующий раздел Справочного руководства Programming in Lua.

1

У каждого объекта есть ссылка, с которой может быть связана переменная, правильно?

№ Lua представляет значения как помеченные союзы (тип, значение). Для переменных, представляющих number, bool или nil, значение сохраняется непосредственно в объединении. Для string, table, function, userdata и thread это значение является указателем (ссылкой) или набором указателей, которые коррелируют с местоположением памяти заголовка объекта.

Как выглядят эти ссылки?

Как сказал Оберон, опорные точки на пятно в памяти, если они представлены в шестнадцатеричном виде, выглядят как 0x0 ..

Если да, существует ли функция, которая может отображать ссылку на более примитивные типы, такие как строка и номер?

number, bool или nil, не имеют каких-либо ссылок. Для строк нет стандартного способа печати своих адресов в Lua. Для table, function и thread Вы можете использовать печать(). Не уверен насчет userdata, вам, возможно, нужно будет определить себя.

Многие детали реализации этих типов покрыты простым языком в this article.

+0

Я попытался добавить эти улучшения в ответ Оберона, но мое редактирование не было одобрено. –

Смежные вопросы