我试图以一种通用的方式用改进来包装函数,这样就可以在没有改进的情况下调用它们。例如,ARRAY-INITIAL size value
而不是ARRAY/INITIAL size value
wrap: function [refined [path!] args [block!]] [
function args compose [
(refined) (args)
]
]
array-initial wrap 'array/initial [size value]
不太花哨。似乎通常可以工作,但是如果您使用函数调用它,这会有些奇怪:
>> n: 0 array/initial 4 does [++ n]
== [10 11 12 13]
>> n: 10 array-initial 4 does [++ n]
== [10 10 10 10]
当我source
得到这个时:
>> source array-initial
array-initial: make function! [[size value][array/initial size value]]
好的,所以发生的事情是函数在包装器中被调用并且调用的结果被传递......而不是函数。一种解决方法是使用 get-word 来避免评估:
>> array-initial-2: function [size value] [array/initial size :value]
>> array-initial-2: 10 array-initial-2 4 does [++ n]
[10 11 12 13]
但我正在寻找一种通用的方法。在不发生这种情况的情况下代理参数的最佳方法是什么?