首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Rebol2中不动态地为对象添加代码呢?

为什么在Rebol2中不动态地为对象添加代码呢?
EN

Stack Overflow用户
提问于 2014-02-26 22:17:04
回答 1查看 55关注 0票数 2

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

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

代码语言:javascript
复制
>> append third o [c: 3]
== [a: 1 b: 2 c: 3]

但是..。

代码语言:javascript
复制
>> first o
== [self a b]
>> second o
== [make object! [
        a: 1
        b: 2
    ] 1 2]
>> third o
== [a: 1 b: 2]

附件不见了!如果附加到first osecond o中,则相同

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

代码语言:javascript
复制
>> 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]

这是为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-26 22:28:44

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

您无法获得作为对象规范传入的原始块的序列引用。在构造对象之后,它就被丢弃了,而且它对对象没有任何进一步的影响。因此,即使您保存了对传递给make object的块的引用,附加到它也不会对对象做任何事情。

您不能在Rebol 2中追加对象,但在Rebol 3中,您可以追加到对象:

代码语言:javascript
复制
>> append make object! [a: 1 b: 2] [c: 3]
== make object! [
    a: 1
    b: 2
    c: 3
]

(注意:不要使用Rebol 2中的序号反射器。使用words-of代替first__,使用values-of代替second__,使用body-of代替third__。自5年前推出的Rebol 2.7.7以来,顺序反射器已被废弃,并在Rebol 3中被移除。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22054644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档