我正在阅读Bindology并尝试了这个:
>> type? first ['x]
== lit-word!
>> type? 'x
== word!
我也期待type? 'x
着回来lit-word!
。欣赏任何见解。
一个字!如果评估者在“实时”上下文中看到,则解析为该词本身。当你想传递一个 WORD 时,它可以用来简单地用一个标记来抑制评估!给函数赋值。 (当然,在你自己的方言中,当你扮演“评估者”的角色时,它是一个修补匠玩具,你可以让它成为你想要的任何东西。)
如果你想得到一个真正的 LIT-WORD!您将不得不以某种方式阻止评估者将其变成单词!。您注意到可以通过从未评估的块中选择它来实现,例如 with first ['x]
。但更“正确”的方法是使用quote 'x
:
>> type? quote 'x
== lit-word!
当心一个叫做“lit-word decay”的奇怪错误:
>> x-lit: quote 'x
>> type? x-lit
== word!
这已在 Red 中更正,正在等待 Rebol 中的更正。在此之前,您必须使用 GET-WORD!从持有它的变量中提取一个 lit-word 值:
>> x-lit: quote 'x
>> type? :x-lit
== lit-word!
(您可能已经遇到过这种做法,即获取一个单词的值与通过评估器“运行”它的方式......就像当您想要处理一个函数的值与调用它时一样。这应该没有必要关于持有字眼的价值观!。似乎是历史的意外。)