2015-03-30 2 views
2

Если true цитата имеет нулевые аргументы, я могу использовать слово when, потому что неявное false цитата также имеет нулевые аргументы (ничего не делает).Как управлять стеком в разветвленных котировках?

Но когда я хочу использовать аргумент, мне нужна ветка else, чтобы очистить стек. Если бы логика была более сложной, я предполагаю, что это может быть утомительным и подверженным ошибкам повторный факторинг. Есть ли более простой способ?

: print-if-dir (directory-entry --) dup directory? [ name>> . ] [ drop ] if ; 

ответ

1

Вы должны использовать smart-when* в:

USE: combinators.smart 

: print-if-string (object --) [ string? ] [ . ] smart-when* ; 

Тестирование это в слушателем:

scratchpad: 2 print-if-string  ! Nothing happens 
scratchpad: "2" print-if-string  ! Prints "2" 
"2"