Переменные объекта
Запись 's.seen' означает, что переменная 'seen' размещена в объекте 's' (то есть 'яблоко'). Помните, мы назвали первый параметр функции 's' (от self), а первый параметр -- это сам текущий объект.
Переменные объекта должны быть определены заранее, если вы собираетесь их модифицировать. Примерно так, как мы поступили с seen. Но переменных может быть много.
obj {
nam = 'яблоко';
seen = false;
eaten = false;
color = 'красный';
weight = 10;
...
};Все переменные объекта, при их изменении, попадают в файл сохранения игры.
Если вы не хотите, чтобы переменная попала в файл сохранения, вы можете объявить такие переменные в специальном блоке:
obj {
nam = 'яблоко';
{
t = 1; -- эта переменная не попадёт в сохранения
x = false; -- и эта тоже
}
};Обычно, вам не стоит так делать. Однако есть ситуация, при которой этот приём будет полезным. Дело в том, что массивы и таблицы объекта всегда сохраняются. Если вы используете массивы для хранения неизменяемых значений, вы можете написать так:
obj {
nam = 'яблоко';
{
text = { "раз", "два", "три" }; -- никогда не попадёт в файл сохранения
}
...
};Вы можете обращаться к переменным объекта через s (если это сам объект) или по переменной - ссылке, например:
apple = obj {
color = 'красный';
}
...
-- где-то в другом месте
apple.color = 'зелёный'Или по имени:
obj {
nam = 'яблоко';
color = 'красный';
}
...
-- где-то в другом месте
_'яблоко'.color = 'зелёный'На самом деле, вы можете создавать переменные-объекта на лету (без предварительного их определения), хотя обычно в этом нет смысла. Например:
apple 'xxx' (10) -- создали переменную xxx у объекта apple по ссылке
(_'яблоко') 'xxx' (10) -- то же самое, но по имени объекта