Reflection 为什么';t Rebol 3是否引用了括号中的函数参数?

Reflection 为什么';t Rebol 3是否引用了括号中的函数参数?,reflection,rebol,symbolic-computation,rebol3,Reflection,Rebol,Symbolic Computation,Rebol3,DO方言使用一系列的类别PAREN!,并且通常会在调用函数之前去掉底层的括号结构 但是,在REBOL2中,可以在函数的定义中指定希望它在调用站点禁止对括号求值。您可以通过在参数上使用“literal word”撇号来完成此操作: evaluated: func [param] [probe param] non-evaluated: func ['param] [probe param] >> evaluated (1 + 2) 3 >> non-evaluated

DO方言使用一系列的类别PAREN!,并且通常会在调用函数之前去掉底层的括号结构

但是,在REBOL2中,可以在函数的定义中指定希望它在调用站点禁止对括号求值。您可以通过在参数上使用“literal word”撇号来完成此操作:

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
这是一个bug还是一个有目的的设计决策?有解决办法吗?请注意,将quote操作符放在调用站点上是不起作用的,因为这样一来,引用的是符号词
quote
,然后是paren!获取其自身的计算值,以成为表达式的最终值:-/

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

此参数传递类型的行为已被故意更改。(包括我在内的许多用户要求进行更改)。优点是可以使用括号请求对该参数类型求值(另一种请求求值的方法是使用get word)。如果希望传递真正未赋值的参数,请参见以下内容:

quote: make function! [[
    "Returns the value passed to it without evaluation."
    :value [any-type!]
][
    :value
]]
与R2相比,这又是一个改进,R2中的函数实际上并不完全相同

万一你真的想通过考试!在不希望将其定义更改为使用“真正未赋值的参数传递”的情况下,您可以尝试以下方法:

non-evaluated (quote (1 + 2))

啊,嗯。好吧,选择行为更酷。Red的
return:
的概念是为意识到这个决定而添加的函数,还是一个单独的东西?(我希望Rebol也会添加
return:
return:
想法来自Carl,并计划用于R3(但我不能保证Carl的想法与Doc正在实现的完全相同,因为不完全了解其中任何一个),而且,
return:
已经用于R2例程的规范中,您可能没有注意到yetAha,我似乎没有回答您的问题
返回:
规范是否相关。在Rebol中,它看起来不相关;唯一的关系是它也是函数规范的一部分。literal参数与get参数确实是一个很好的选择。“许多用户,包括[你自己]”的道具。大量应用程序。请注意,R2中用于描述此参数传递类型的术语是。(还要注意,此链接后面的《用户指南》中的一些示例排版不好,总是
,从不