0

我已经对此进行了实验:

>> code-block: copy []
== []
>> append code-block [func[][print "a"] ]
== [func [] [print "a"]]
>> do do code-block
a
>>

有没有办法避免做两次“做”:)

4

1 回答 1

4

您放入代码块的不是函数,而是函数的来源,因此需要执行一次以创建函数,然后再将其作为函数执行

你可以看到这样的:

length? code-block
== 3

只需将函数放入code-block,可以这样做:

code-block: copy []
append code-block func[][print "a"]    ;; no block around the FUNC

或这个:

code-block: copy []
append code-block reduce [func[][print "a"] ]  ;; use REDUCE to evaluate the block

无论哪种方式,代码块中的内容现在只是函数:

length? code-block
== 1
type? first code-block
== function!
do code-block     ;; what you asked for!
a
于 2009-09-17T17:11:35.340 回答