在解释器中:
>> qurl: "1234"
== "1234"
>> R: make object! [probe qurl qq: qurl probe qq]
"1234"
"1234"
== make object! [
qq: "1234"
]
这就像我期望的那样。默认情况下,所有“变量”或“单词”都是全局的。
使用脚本:
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
返回:
"[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
都会返回 "1234"
,但是没有人这样做。
这是为什么?
最佳答案
当 Rebol 创建一个对象时,它首先从规范中收集(集合)词并使用它们来创建新对象。新对象的词最初分配给none
。然后将规范绑定(bind)到新对象并进行评估。
在你的第一个例子中,你没有在你的规范中包含 qurl:
,因此它不是你的对象的一部分。相反,您得到的是“全局”qurl
。在您的第二个示例中,qurl
是您的对象的一部分,并以 none
启动。
在第二个示例中访问与“全局”qurl
关联的值的选项是:
1.组合 block ,以便在计算 block 时直接访问值:
Q: make object! compose [
qq: (qurl)
qurl: (qurl)
]
2。从“全局”上下文访问单词:
Q: make object! [
qq: system/words/qurl ; Rebol 2
qq: system/contexts/user/qurl ; Rebol 3
]
关于object - 访问对象内的字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295997/