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!块内的值将减少。