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

问题描述 投票:1回答:2

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

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

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

功能

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

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

有人能指出问题是什么吗?

rebol red
2个回答
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

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][...]
© www.soinside.com 2019 - 2024. All rights reserved.