【问题标题】:REBOL 3 - Where can user defined namespace words be accessed?REBOL 3 - 在哪里可以访问用户定义的命名空间词?
【发布时间】:2013-07-16 20:12:33
【问题描述】:

假设我定义了几个词:

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]

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

【问题讨论】:

  • 无论是在脚本还是控制台中,使用的任何内置词都会在用户上下文中绑定
  • 涉及到 LOAD-GUI 要复杂得多,因为它绑定了很多不同的词
  • 在 load-gui 之前或之后检查对我想要做的事情没有帮助
  • load-gui 加载的 Rebol 3 GUI 还没有真正模块化,所以我预计它会在用户上下文中泄漏很多单词。不要假设您发现的任何单词都是故意泄露的,除非它们被记录在案,甚至可能没有。如果你想帮助他们收拾东西,那就太好了。

标签: rebol rebol3


【解决方案1】:

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

在您的示例代码中,当您在脚本中使用单词form 时,它会添加到用户上下文中。然后form 被分配了lib/form 当时分配的值。从此form为用户字,系统字为lib/form

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

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

您可能想在这里查看更多详细信息:How are words bound within a Rebol module? 这里也是:What is the summary of the differences in binding behaviour between Rebol 2 and 3?

【讨论】:

  • 欣赏解释——非常有帮助。我试图让自己成为一种调试 IDE。 RE: LOAD-GUI 我可能有点新手要弄清楚它是否有意/无意地将单词泄漏到用户上下文中,但我会看看我能弄清楚什么
猜你喜欢
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 2020-05-21
  • 2011-02-10
  • 1970-01-01
  • 2012-09-25
  • 2017-12-27
  • 2013-07-05
相关资源
最近更新 更多