Объект '@'
Обычно, вам не нужно работать с такими объектами, но в качестве примера рассмотрим реализацию 'ссылок'.
Пусть мы хотим сделать ссылку, при нажатии на которую мы перейдём в другую комнату. Конечно, мы могли бы добавить объект в сцену, но стоит ли это делать в таком простом случае?
Как нам может помочь системный объект?
lua
obj {
nam = '@walk';
act = function(s, w)
walk(w, false, false)
end;
}
room {
nam = 'main';
title = 'Начало';
decor = [[Начать {@walk старт|приключение}]];
}При нажатии на ссылку "приключение" будет вызван метод act объекта '@walk' с параметром "старт".
На самом деле, в стандартной библиотеке stdlib уже есть объект, с именем '@', который позволяет делать свои обработчики ссылок следующим образом:
lua
xact.walk = walk
room {
nam = 'main';
title = 'Начало';
decor = [[Начать {@ walk старт|приключение}]];
}Обратите внимание, на пробел после @. Данная запись делает следующее:
- берет объект '@' (такой объект создан библиотекой stdlib);
- берет его act;
- вызывает act с параметрами walk и старт;
- act объекта '@' смотрит в массив xact;
- walk определяет метод, который будет вызван из массива xact;
- старт -- параметр этого метода.
Другой пример:
lua
xact.myprint = function(w)
p (w)
end
room {
nam = 'main';
title = 'Начало';
decor = [[Нажми {@ myprint "hello world"|на кнопку}]];
}