访问对象内的字值

Access word value inside object

在解释器中:

>>  qurl: "1234"
== "1234"

>> R: make object! [probe qurl qq: qurl probe qq]
"1234"
"1234"
== make object! [
    qq: "1234"
]

这符合我的预期。默认情况下,所有 "variables" 或 "words" 都是全局的。

使用脚本:

REBOL []

qurl: "1234"

Q: make object! [
    probe join "[Q before qq] qurl: " qurl
    qq: qurl
    probe join "[Q] qq: " qq
    qurl: qurl
    probe join "[Q after qurl] qurl: " qurl
]
probe join "[main before Q] qurl: " qurl
Q
probe join "[main after Q] qurl: " qurl

return秒:

"[Q before qq] qurl: none"
"[Q] qq: none"
"[Q after qurl] qurl: none"
"[main before Q] qurl: 1234"
"[main after Q] qurl: 1234"

我希望 Q object! 中的所有 probe 都会 return "1234",但 none 会。

这是为什么?

当 Rebol 创建一个对象时,它首先从规范中收集(集合)词并使用它们来创建新对象。新对象的词最初分配给none。然后将规范绑定到新对象并进行评估。

在你的第一个例子中,你没有在你的规范中包含 qurl:,因此它不是你的对象的一部分。相反,您得到 'global' qurl。在您的第二个示例中,qurl 是您对象的 部分,并以 none.

启动

您在第二个示例中访问与 'global' qurl 关联的值的选项是:

1。组合块,以便在计算块时直接访问值:

Q: make object! compose [
    qq: (qurl)
    qurl: (qurl)
]

2。从 'global' 上下文访问单词:

Q: make object! [
    qq: system/words/qurl ; Rebol 2
    qq: system/contexts/user/qurl ; Rebol 3
]