Object 访问对象内部的单词值
在口译员中:Object 访问对象内部的单词值,object,scope,rebol,rebol3,red,Object,Scope,Rebol,Rebol3,Red,在口译员中: >> 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 befo
>> 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
对象内
将返回“1234”
,但没有一个返回
为什么会这样?当Rebol创建一个对象时,它首先从规范中收集(set-)单词,并使用它们创建新对象。新对象的单词最初分配给none
。然后将等级库绑定到新对象并进行计算
在第一个示例中,您的规范中没有包含qurl:
,因此它不是对象的一部分。取而代之的是“全局”qurl
。在第二个示例中,qurl
是对象的一部分,由none
启动
在第二个示例中,访问与'global'qurl
关联的值的选项有:
一,。组合块,以便在计算块时,它直接访问值:
Q: make object! compose [
qq: (qurl)
qurl: (qurl)
]
二,。从“全局”上下文访问单词:
Q: make object! [
qq: system/words/qurl ; Rebol 2
qq: system/contexts/user/qurl ; Rebol 3
]
在示例1中,括号是一种评估?@luis Yes-compose
是一个不可或缺的函数,它允许您以可控的方式预处理块。它类似于reduce
,除了只有paren!块内的值将减少。