为什么不雷博尔3荣誉引述的括号函数的参数?(Why doesn't Rebol 3 hono

2019-07-18 17:41发布

该DO方言使用类别PAREN的系列! 为优先,并且通常会蒸发掉底层括号结构调用的功能之前进行。

然而,过去可能在Rebol的2到你希望它为调用抑制括号的评价函数的定义中指定。 通过使用一个参数“真言”撇号标记这样做:

evaluated: func [param] [probe param]

non-evaluated: func ['param] [probe param]

>> evaluated (1 + 2)
3

>> non-evaluated (1 + 2)
(1 + 2)

所以,你得到通过一系列! 分类型,类PAREN的......在这种情况下,有三个标志性元素里面: 1+2 。 这并不在Rebol的3个工作:

>> non-evaluated (1 + 2)
3

这是一个错误或有目的的设计决策? 有没有解决办法? 需要注意的是把报价运营商在调用点是行不通的,因为当时它象征词quote是被引述,然后括号! 对自己被评价成为表达的终值: - /

>> non-evaluated quote (1 + 2)
quote
== 3

Answer 1:

这个参数传递类型的行为已更改的目的。 (许多用户包括我自己要求的变化)。 其优点是,你可以使用括号此参数类型请求评估(另一种方式如何申请评价是使用get字)。 如果你想真正的未计算的参数传递,看到这一点:

quote: make function! [[
    "Returns the value passed to it without evaluation."
    :value [any-type!]
][
    :value
]]

这又是一个进步相比,R2,其中这样的功能并没有真正的表现完全一样。

而如果你真的想通过一个括号! 给你的函数,而不是想改变它的定义中使用“真正未评估的参数传递”你可以试试这个:

non-evaluated (quote (1 + 2))


文章来源: Why doesn't Rebol 3 honor quoted function parameters that are parenthesized?