Как работают таблицы Lua - PullRequest
       3

Как работают таблицы Lua

0 голосов
/ 15 ноября 2011

Я начинаю изучать Lua из программирования на Lua (2-е издание). Я не понял следующего в книге.Это очень смутно объяснено.

a.) w={x=0,y=0,label="console"}

b.) x={math.sin(0),math.sin(1),math.sin(2)}

c.) w[1]="another field"

d.)x.f=w

е.) print (w["x"])

ф.) print (w[1])

г.) print x.f[1]

Когда я делаю print(w[1]) после а.), почему он не печатает x=0

Что делает с.)?

В чем разница между е.) и print (w.x)?

Какова роль б.) И ж.)?

Ответы [ 3 ]

11 голосов
/ 15 ноября 2011

Вы должны понимать, что это:

t = {3, 4, "eggplant"}

такое же, как это:

t = {}
t[1] = 3
t[2] = 4
t[3] = "eggplant"

И что это:

t = {x = 0, y = 2}

то же самоекак это:

t = {}
t["x"] = 0
t["y"] = 2

Или это:

t = {}
t.x = 0
t.y = 2

В Lua таблицы - это не просто списки, это ассоциативные массивы .

Когда вы печатаете w[1], тогда действительно важна строка c.) На самом деле, w[1] вообще не определяется до строки c.).

Нет разницы междуе.) и print (w.x).

b.) Создает новую таблицу с именем x, которая отделена от w.

d.) Помещает ссылку на w внутри x.(ПРИМЕЧАНИЕ. На самом деле это не копия w, а просто ссылка . Если вы когда-либо работали с указателями, это похоже.)

g.) Может быть поврежденов двух частях.Сначала мы получаем x.f, что является еще одним способом ссылки на w из-за строки d.).Затем мы ищем первый элемент этой таблицы, который равен "another field" из-за строки c.)

1 голос
/ 04 марта 2015

Существует еще один способ создания ключей в объявлениях встроенных таблиц.

x = {["1st key has spaces!"] = 1}

Преимущество заключается в том, что вы можете иметь ключи с пробелами и любым расширенным символом ASCII.На самом деле ключ может быть буквально любым, даже экземпляром объекта.

function Example()
    --example function
end
x = {[Example] = "A function."}

Любая переменная, значение или данные могут быть заключены в квадратные скобки для работы в качестве ключа.То же самое относится и к значению.На практике это может заменить такие функции, как ключевое слово in в python, поскольку вы можете индексировать таблицу по значениям, чтобы проверить, есть ли они там.

Получение значения в неопределенной части таблицы не вызоветошибка.Это просто даст вам ноль.То же самое касается использования неопределенных переменных.

0 голосов
/ 24 сентября 2014
local w = {
    --[1] = "another field"; -- will be set this value
    --["1"] = nil;  -- not save to this place, different with some other language
    x = 0;
    y = 0;
    label = "console";

}
local x = {
    math.sin(0);
    math.sin(1);
    math.sin(2);
}

w[1] = "another field" -- 
x.f  = w

print (w["x"])

-- because x.f = w
-- x.f and w point one talbe address
-- so value of (x.f)[1] and w[1] and x.f[1] is equal
print (w[1])
print ((x.f)[1])
print (x.f[1])

-- print (x.f)[1] this not follows lua syntax 
-- only a function's has one param and type of is a string
-- you can use print "xxxx"
-- so you print x.f[1] will occuur error


-- in table you can use any lua internal type 's value to be a key
-- just like

local t_key = {v=123}
local f_key = function () print("f123") end

local t = {}
t[t_key] = 1
t[f_key] = 2

-- then t' key actualy like use t_key/f_key 's handle 

-- when you user t[{}] = 123, 
-- value 123 related to this no name table {} 's handle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...