访问对象内的字值
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
]
在解释器中:
>> 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
]