Локальные переменные-аргументы слова. (( .. ))

 
+
-
edit
 

Balancer

администратор
★★★★★
В первом приближении - аргументы слов. Описывается до первого использования в любом месте в виде
code forth
  1. : word  (( arg1 arg2 ... argN -- out1 out2 ... outN ))
  2.     arg1 operation
  3.     arg2 argN operation \ ...
  4. \ ...
  5. ;

параметры со стека снимаются в указанном порядке и записываются в указанные uvalue-переменные.

Осторожно. Каждое использование новой переменной аргумента стирает из словарей предыдущие упоминания одноимённого слова. Поэтому обычная рекомендация - для аргументов используйте имена попроще, для слов - посложнее :)

Использовать конструкцию (( .. )) можно несколько раз в слове. Каждый раз она будет снимать со стека N аргументов и раскладывать их в переменные.

Помните также, что эта конструкция несколько снижает быстродействие.

code forth
  1. : hcoords-randomize  (( x y z h diff -- x1 y1 z h ))
  2.     x y z diff coords-randomize
  3.     h
  4. ;


В Fortress закину теперь уже, наверное, только послезавтра. Или сами кто-нибудь закиньте jbforth.jar из JBForth в libs каталог L2Fortress.
 
+
-
edit
 

Balancer

администратор
★★★★★
Небольшой фикс сабжа. Теперь при вызове ((, словарь local: не прописывается в current. Он изначально добавляется в системный wordlist order.
 
+
-
edit
 

Balancer

администратор
★★★★★
Неожиданно выяснилось, что эти слова замечательно работают и внутри определений, не только вначале :) Логика та же - заводятся переменные и со стека в них снимаются значения.
code forth
  1. : do-mass-gk  ( {npc castle} -- )
  2.     list-rev> drop
  3.     (( castle ))
  4.     castle gk-go-shout
  5.  
  6.     castle
  7.         castle castle>owner-restart-territory
  8.     getPlayersAtTerritory
  9.     & jump-to-throne
  10.         p-do-list
  11.  
  12.     castle erase-timer
  13. ;


Но злоупотреблять этим не стоит. Каждое такое определение ощутимо тормозное... Ну, считайте, что на каждую переменную затрат как на обработку двух-трёх обычных слов. Т.е. в 99.9% не критично, конечно, но если код будет использоваться очень часто - хорошенько подумайте.

А так - поможет не запутаться в стеке, если что :)
 

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