【发布时间】:2017-12-30 22:28:09
【问题描述】:
我试图弄清楚如何调用这样定义的函数:
outer: [inner: [ f: func [p1 p2] [rejoin ["p1:" p1 "/p2:" p2]] ]]
print outer/inner/f "aaa" "bbb"
功能
如果我在函数调用前添加do,我会得到
*** 脚本错误:func 缺少其规范参数
谁能指出问题出在哪里?
【问题讨论】:
我试图弄清楚如何调用这样定义的函数:
outer: [inner: [ f: func [p1 p2] [rejoin ["p1:" p1 "/p2:" p2]] ]]
print outer/inner/f "aaa" "bbb"
功能
如果我在函数调用前添加do,我会得到
*** 脚本错误:func 缺少其规范参数
谁能指出问题出在哪里?
【问题讨论】:
你写的是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
【讨论】:
默认情况下不评估 In 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][...]
【讨论】: