如果true
引用的参数为零,我可以使用when
word 因为隐式false
引用也有零参数(什么都不做)。
但是当我想使用参数时,我需要else
分支来清理堆栈。如果逻辑更复杂,我想这可能是繁琐且容易出错的重构。有没有更简单的方法?
: print-if-dir ( directory-entry -- ) dup directory? [ name>> . ] [ drop ] if ;
如果true
引用的参数为零,我可以使用when
word 因为隐式false
引用也有零参数(什么都不做)。
但是当我想使用参数时,我需要else
分支来清理堆栈。如果逻辑更复杂,我想这可能是繁琐且容易出错的重构。有没有更简单的方法?
: print-if-dir ( directory-entry -- ) dup directory? [ name>> . ] [ drop ] if ;
您需要使用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"