6

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)

だからあなたはSERIESを渡されます!クラス PAREN! のカテゴリ タイプ...この場合、内部に 3 つの記号要素があります: 1+2. これはRebol 3では機能しません:

>> non-evaluated (1 + 2)
3

これはバグですか、それとも意図的な設計上の決定ですか? 回避策はありますか? クォート演算子をコールサイトに配置しても機能しないことに注意してください。これは、クォートされるのはシンボリック ワードquoteであり、その後に括弧が続くためです。単独で評価され、式の最終値になります:-/

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

1 に答える 1

7

この引数受け渡しタイプの動作は、意図的に変更されています。(私を含む多くのユーザーが変更を要求しました)。利点は、括弧を使用してこの引数タイプの評価を要求できることです(評価を要求する別の方法は、get-wordを使用することです)。真に未評価の引数を渡す場合は、次を参照してください。

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

これも、そのような関数が実際にはまったく同じように動作しないR2と比較して改善されています。

そして、あなたが本当にパレンを渡したい場合に備えて!「真に評価されていない引数の受け渡し」を使用するように定義を変更したくない場合は、関数に対して次のことを試すことができます。

non-evaluated (quote (1 + 2))
于 2013-01-26T01:29:59.530 に答える