[[ ... ]] как синонимы :noname ... ;

 
+
-
edit
 

Balancer

администратор
★★★★★
Хоть и расточительно тратить эти слова, могли бы на что-то ещё пригодиться, но уж больно наглядно с ними выходит :)

[[ - это полный синоним слов :noname (стандартное слово) и &: (нестандартное, смысл сочетания - "адрес (&)определённого далее слова (:)").

]] - синоним ;.

Первое слово создаёт безымянное определение, возвращая его адрес. Второе - завершает определение как обычно.

Чаще всего слово :noname и, соответственно, сабжи требуются, если нужно передать куда-то адрес слова. Это то, что в функциональном программировании называется лямбдой.

Пример.

Слово do-players снимает со стека один параметр и выполняет его для всех игроков сервера. Если это строка - то будет интерпретировать строку. Что, однако, медленно. Ибо будет интерпретироваться во время выполнения и для каждого игрока индивидуально. Кроме того, в режиме интерпретации нельзя, например, пользоваться условиями или циклами. Пример (можно ввести из админки), который выдаёт каждому игроку сервера по 1 адене:
"1 57 items_add" do-players

Можно do-players передать не строку, а адрес (ссылку) на определённое ранее слово:
code forth
  1. : add_one_adena   1 57 items_add ;
  2. & add_one_adena do-players

(напомню, что & - это алиас стандартного слова ['], которое возвращает адрес на идущее следом слово)

В таком виде оно будет работать намного быстрее, но "мусорит" лишним словом.

Классическое решение - использование :noname ... ; - сделает то же самое, но без запоминания нашего временного слова в словаре:
:noname 1 57 items_add ; do-players

Но в таком виде оно всё ещё громоздко и плохо читается. А что у нас Форт? Правильно, краткость и наглядность. Переписываем то же самое с использованием синонимов:

[[ 1 57 items_add ]] do-players.

Всё. Красиво и быстро! :)
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru