【问题标题】:Calling function defined in the different block (Red/Rebol)调用不同块中定义的函数(Red/Rebol)
【发布时间】: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 缺少其规范参数

谁能指出问题出在哪里?

【问题讨论】:

    标签: rebol red


    【解决方案1】:

    你写的是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】:

      默认情况下不评估 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][...]
      

      【讨论】:

      • 感谢您提供解释和替代实现,但就我而言,我认为对象是表达意图的更自然的方式。
      • @aseidlitz 我怀疑是这样——虽然 Rebol 永远无法确定... :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多