Skip to content

Переменные объекта

Запись 's.seen' означает, что переменная 'seen' размещена в объекте 's' (то есть 'яблоко'). Помните, мы назвали первый параметр функции 's' (от self), а первый параметр -- это сам текущий объект.

Переменные объекта должны быть определены заранее, если вы собираетесь их модифицировать. Примерно так, как мы поступили с seen. Но переменных может быть много.

lua
obj {
	nam = 'яблоко';
	seen = false;
	eaten = false;
	color = 'красный';
	weight = 10;
	...
};

Все переменные объекта, при их изменении, попадают в файл сохранения игры.

Если вы не хотите, чтобы переменная попала в файл сохранения, вы можете объявить такие переменные в специальном блоке:

lua
obj {
	nam = 'яблоко';
	{
	   t = 1; -- эта переменная не попадёт в сохранения
	   x = false; -- и эта тоже
	}
};

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

lua
obj {
	nam = 'яблоко';
	{
	   text = { "раз", "два", "три" }; -- никогда не попадёт в файл сохранения
	}
	...
};

Вы можете обращаться к переменным объекта через s (если это сам объект) или по переменной - ссылке, например:

lua
apple = obj {
    color = 'красный';
}
...
-- где-то в другом месте
    apple.color = 'зелёный'

Или по имени:

lua
obj {
    nam = 'яблоко';
    color = 'красный';
}
...
-- где-то в другом месте
    _'яблоко'.color = 'зелёный'

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

lua
apple 'xxx' (10) -- создали переменную xxx у объекта apple по ссылке
(_'яблоко') 'xxx' (10) -- то же самое, но по имени объекта