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