字面词的类型

RAb*_*ham 7 rebol red

我正在阅读Bindology并试过这个:

>> type? first ['x]
== lit-word!
>> type? 'x
== word!
Run Code Online (Sandbox Code Playgroud)

我预计也会type? 'x回来lit-word!.欣赏任何见解.

Hos*_*ork 4

一个简单的词!如果评估者在“实时”上下文中看到该词,则解析为单词本身。当您想传递一个 WORD 时,它可以用于仅使用单个标记来抑制求值!函数的值。 (当然,用你们自己的方言来说,当你扮演“评估者”的角色时,它是一个修补玩具,你​​可以让它代表任何你想要的意思。)

如果您想获得一个实际的 LIT-WORD!你必须以某种方式阻止评估者将其变成一个单词!您注意到这可以通过从未评估的块中挑选它来实现,例如使用first ['x]. 但更“正确”的方法是使用quote 'x:

>> type? quote 'x
== lit-word!
Run Code Online (Sandbox Code Playgroud)

当心一个被称为“lit-word Decay”的奇怪错误:

>> x-lit: quote 'x
>> type? x-lit
== word!
Run Code Online (Sandbox Code Playgroud)

该问题已在 Red 中得到纠正,并有待 Rebol 中的纠正。在那之前你必须使用 GET-WORD!从保存它的变量中提取 lit-word 值:

>> x-lit: quote 'x
>> type? :x-lit
== lit-word!
Run Code Online (Sandbox Code Playgroud)

(您可能已经遇到过这种做法,即获取单词的值与通过求值器“运行”它的方式......就像当您想要处理函数的值与调用它时一样。这应该没有必要关于持有文字的价值观!。这似乎是历史的意外。)