如何管理分支报价中的堆栈?
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"
如果 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"