如何管理分支报价中的堆栈?

How to manage stack in branched quotations?

如果 true 引用有零个参数,我可以使用 when 词,因为隐式 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"