object - 访问对象内的字值

标签 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 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/

相关文章:

javascript - 在散列数组中保存对 jquery 元素的引用

javascript对象错误

javascript - React.js - 实现组件排序

jquery - 关于 Jquery 范围的新手问题

dictionary - 测试 MAP 成员资格的常用方法!在《Rebol 2》和《Rebol 3》中都工作?

user-interface - 有没有办法在 Rebol 中将 gui 按钮和字段居中?

Java Hibernate json无限递归与自引用类

javascript - 如何在 JavaScript 中将两个数组转换为一个对象?

javascript - 为什么我不能在回调中重复使用变量名?

rebol - 如何将 block 中的 set-words 转换为单词