5

假设我定义了几个词:

Word1: 5
Word2: "blahdiddyblah"

系统的某些部分或块是否存储正在使用的单词?

尝试过这样的事情,但失败了:

S1: to-block copy system/contexts/user

D: 3

S2: to-block copy system/contexts/user

Difference s1 s2

根据@johnk 的建议,我尝试了:

>> snapshot-of-words: words-of system/contexts/user
== [system snapshot-of-words words-of contexts user]

>> x: 1
== 1

>> difference snapshot-of-words words-of system/contexts/user
== [x difference]

>> difference snapshot-of-words words-of system/contexts/user
== [x difference]

>> 5 + 9
== 14

>> form ["hellow" "there" ]
== "hellow there"

>> difference snapshot-of-words words-of system/contexts/user
== [x difference + form]

这是什么意思?本机函数在使用后绑定到用户上下文中?有没有办法将这些与用户可能绑定的内容隔离开来?

4

1 回答 1

5

当您在脚本中使用单词时 - 您以交互方式输入的每个命令行都是不同的脚本 - 这些单词被添加到system/contexts/user用户上下文中。只需将脚本中的单词添加到用户上下文中,这就是所有需要的“使用”。如果这些新词中的任何一个已经存在于lib运行时库中,那么用户上下文词会从这些词当时在运行时库中的值中获得它们的初始值。

在您的示例代码中,当您form在脚本中使用该词时,它会添加到用户上下文中。然后form分配当时分配的值lib/form。从此,form是一个用户词——系统词是lib/form

单词的值传播lib到用户上下文的唯一时间是该单词首次添加到用户上下文并被赋予其初始值时。之后,如果您希望lib对该单词的版本进行任何更改以使其成为该单词的用户上下文版本,您必须自己分配它。如果它们具有相同的值,那只是因为您没有为用户或系统词分配新值。

用户上下文中的所有单词都是用户创建的单词,即使是从 初始化的单词lib。用户在将这些词放入用户脚本时会做出这些词。这就是用户上下文的重点。因此,如果您print在脚本中使用,那是一个用户词,与任何其他用户词没有什么不同。

您可能想在这里查看更多详细信息:Rebol 模块中的单词是如何绑定的? 这里也是:Rebol 2 和 3 之间绑定行为差异的总结是什么?

于 2013-07-18T23:43:25.783 回答