如何用args传递一个红色的函数?

时间:2016-10-19 06:39:45

标签: rebol red

如何将函数作为参数传递给红色? 或者我不需要红色的那个?

使用does我可以定义一个函数"没有参数或局部变量"

f: does [print 1] do f
>> 1

如何使用(多个)args进行此操作? does没有办法,是什么?

我想要类似的东西:(以下不起作用):

; does NOT work
f: does-with-args [x][print x] do f 23
>> 1

在本文的最后一段http://blog.revolucent.net/2009/05/javascript-rebol.html中,作者说"允许函数作为参数传递"所以我很兴奋,但它也只是使用does :)。但我知道这是可能的。

1 个答案:

答案 0 :(得分:3)

  

如何将函数作为参数传递给红色?

这似乎不是你的问题的本质,但你可以通过几种方式将函数作为参数传递:

my-func: func [their-func [any-function!]][their-func "Stuff"]
my-func :print
my-func func [thing][probe uppercase thing]
  

如何使用(多个)args进行此操作?

这里有两种可能性。一个是申请:

my-func: func [thing][print uppercase thing]
apply :my-func ["Foo"]

另一种方法是建立一个区块并执行它:

do collect [keep 'my-func keep "Bar"]
do collect [keep :my-func keep "Baz"] ; keeps the function itself

注意:APPLY可能很古怪,我认为还不是Red,值得尝试。