Rebol:找到一种动态自动生成和执行代码的方法,有更好的方法吗?

时间:2009-09-17 06:50:57

标签: rebol

我已经尝试过这个:

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

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

1 个答案:

答案 0 :(得分:4)

你在代码块中添加的不是函数,而是函数的来源,因此需要执行一次才能生成函数,然后再次它作为一个功能。

你可以这样看:

length? code-block
== 3

要将该功能置于代码块中,可以执行以下操作:

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