在翻译中:
osgi.configuration.area
@user.home/Updater/configuration
osgi.instance.area
@user.home/Updater/workspace
这表现得像我期待的那样。默认情况下,所有“变量”或“单词”都是全局的。
使用脚本:
>> 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"
probe
内的所有Q
都会返回object!
,但没有一个会回复"1234"
。
为什么?
答案 0 :(得分:4)
当Rebol创建一个对象时,它首先从spec中收集(set-)单词并使用它们来创建新对象。新对象的单词最初分配给none
。然后将规范绑定到新对象并进行评估。
在您的第一个示例中,您未在规范中包含qurl:
,因此不属于您的对象。而是获得“全球”qurl
。在第二个示例中,qurl
是您对象的一部分,并以none
启动。
在第二个示例中,您可以选择访问与“全局”qurl
相关联的值:
1。组合块,以便在评估块时,它直接访问该值:
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
]