gpt4 book ai didi

object - 为什么在Rebol2中动态添加代码到对象不生效?

转载 作者:行者123 更新时间:2023-12-02 21:32:26 25 4
gpt4 key购买 nike

这个问题是关于动态添加代码到rebol 2中的上下文或对象,它与问题Dynamically adding words to a context in REBOL相关。但不是同一种。

如果我想使用其代码块动态地将代码添加到 rebol 对象,我会因为奇怪的行为而遇到麻烦:

>> append third o [c: 3]
== [a: 1 b: 2 c: 3]

但是...

>> first o
== [self a b]
>> second o
== [make object! [
a: 1
b: 2
] 1 2]
>> third o
== [a: 1 b: 2]

附件丢失!如果 append 到第一个o第二个o

,则相同

使用“通用” block 不会发生这种情况:

>> m: [a [b] c]
== [a [b] c]
>> append m 3
== [a [b] c 3]
>> m
== [a [b] c 3]
>> append second m 1
== [b 1]
>> m
== [a [b 1] c 3]

这是为什么?

最佳答案

第三个函数不返回原始对象规范,它返回从对象的单词和值生成的新的设置单词和值 block 。因此,您要 append 到该新 block (这会影响该 block ,但不会影响该对象)。

您无法获取对作为对象规范传入的原始 block 的系列引用。它在对象构造完成后就被扔掉了,而且无论如何它对对象都没有进一步的影响。因此,即使您已经保存了对传递给 make object 的 block 的引用, append 到它也不会对对象执行任何操作。

您根本无法在 Rebol 2 中 append 到对象。但在 Rebol 3 中,您可以 append 到对象:

>> append make object! [a: 1 b: 2] [c: 3]
== make object! [
a: 1
b: 2
c: 3
]

(注意:不要在 Rebol 2 中使用序数反射器。使用 words-of 而不是 firstvalues-of 代替 secondbody-of 代替 third。自 Rebol 2.7.7 发布以来,序数反射器已被弃用。 5 年前,已在 Rebol 3 中删除。)

关于object - 为什么在Rebol2中动态添加代码到对象不生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com