我试图弄清楚如何调用这样定义的函数:
outer: [inner: [ f: func [p1 p2] [rejoin ["p1:" p1 "/p2:" p2]] ]]
print outer/inner/f "aaa" "bbb"
功能
如果我在函数调用前添加do
,我会得到
***脚本错误:func缺少其spec参数
有人能指出问题是什么吗?
你写的是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
在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][...]