Object 为什么';动态地向对象添加代码在Rebol2中是否生效?

Object 为什么';动态地向对象添加代码在Rebol2中是否生效?,object,append,block,rebol,rebol2,Object,Append,Block,Rebol,Rebol2,这个问题是关于在REBOL2中动态地向上下文或对象添加代码,它和这个问题相关,但它不是同一类 如果我想使用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] &

这个问题是关于在REBOL2中动态地向上下文或对象添加代码,它和这个问题相关,但它不是同一类

如果我想使用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]
附件不见了!如果附加到
第一个o
第二个o

使用“公共”块时不会发生这种情况:


这是为什么?

第三个
函数不返回原始的对象规范,它返回一个新的集合词和值块,这些集合词和值是由对象的词和值生成的。因此,您将附加到该新块(这会影响块,但不会影响对象)

您无法获取作为对象规范传入的原始块的系列引用。它在构建对象后被丢弃,并且对对象没有进一步的影响。因此,即使保存了对传递给
make object
的块的引用,附加到该块也不会对该对象产生任何影响

在REBOL2中,您不能简单地附加到对象。但在Rebol 3中,您可以附加到对象:

>> append make object! [a: 1 b: 2] [c: 3]
== make object! [
    a: 1
    b: 2
    c: 3
]
(注意:不要在Rebol 2中使用顺序反射器。使用
的单词代替第一个,的值代替第二个,以及正文代替第三个。顺序反射器自5年前推出的Rebol 2.7.7以来一直被弃用,并在Rebol 3中被删除。)

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