2

如果true引用的参数为零,我可以使用whenword 因为隐式false引用也有零参数(什么都不做)。

但是当我想使用参数时,我需要else分支来清理堆栈。如果逻辑更复杂,我想这可能是繁琐且容易出错的重构。有没有更简单的方法?

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

1 回答 1

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"
于 2015-04-29T20:52:12.717 回答