调用在不同块中定义的函数(Red / Rebol)

时间:2017-12-30 22:28:09

标签: rebol red

我试图弄清楚如何调用这样定义的函数:

outer: [inner: [ f: func [p1 p2] [rejoin ["p1:" p1 "/p2:" p2]] ]]

print outer/inner/f "aaa" "bbb"
  

FUNC

如果我在函数调用的前面添加do,我会得到

  

***脚本错误:func缺少其spec参数

有人可以指出问题是什么吗?

2 个答案:

答案 0 :(得分:2)

你写的是block!数据。在评估数据之前,数据不会转向代码。您可能希望将block!转换为object!。试试这个:

>> outer: object [inner: object [ f: func [p1 p2] [rejoin ["p1:" p1 "/p2:" p2]] ]]
== make object! [
    inner: make object! [
        f: func [p1 p2][rejoin ["p1:" p1 "/p2:" p2]]
    ]
]
>> print outer/inner/f "aaa" "bbb"
p1:aaa/p2:bbb

答案 1 :(得分:2)

默认情况下,不会对Rebol块进行评估(例如do [...]if true [...])。在您的示例中,outer/inner/f正在返回未评估的字词'func。如果您希望以这种方式放置函数,则需要选择创建它的方法,例如:

outer: compose/deep [inner: [f: (func [p1 p2][...])]]

或者:

outer: [inner: [f: none]]
outer/inner/f: func [p1 p2][...]