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

发布于 2024-08-05 04:17:55 字数 210 浏览 1 评论 0原文

我已经尝试过这个:

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

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

I have experimented with this:

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

Is there a way to avoid to do "do" twice :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嗳卜坏 2024-08-12 04:17:55

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

您可以这样看到:

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

无论哪种方式,code-block 中的内容现在只是功能:

length? code-block
== 1
type? first code-block
== function!
do code-block     ;; what you asked for!
a

What you have put into code-block is not the function, but the source of the function, hence the need to do it once to make a function, then do it again as a function.

You can see that like this:

length? code-block
== 3

To just put the function in code-block, can do this:

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

Or this:

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

Either way, what is in code-block is now just the function:

length? code-block
== 1
type? first code-block
== function!
do code-block     ;; what you asked for!
a
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文