在Rebol中保护对象属性

时间:2013-07-02 17:29:47

标签: object rebol rebol3 rebol2 red

我在Rebol尝试一些非常基本的东西。我想要一个简单的实例层次结构 - 一个question基本实例和一些question子实例。我希望保护一些实例属性。

我现在正在做的是:

_question: make object! [
    id: none
    type: none
    text: none ]

    question-text: make _question [
        type: 'text

    new: func [
        id' [integer!]
        text' [string!]
    ] [
        make self [
            id: id'
            text: text'

            protect [ id type text ]
        ]
    ]
]

但后来失败了:

qt1: question-text/new 1 "q-text1"
qt2: question-text/new 2 "q-text2"

一旦我做了第二个实例qt2,我得到:

  

脚本错误:Word ID受保护,无法修改

接下来的想法是将受保护的字段移出_question并将它们放入question_text - 即使我不喜欢它。但这只会导致同样的错误。

注意:我目前正在使用Rebol2进行此操作,但理想情况下也可以在Rebol3和Red中运行。而且我想避免黑客攻击(当然 - 这很模糊,像Python getitem()/setitem()这样的技巧会很好)。然后我宁愿让这些字段不受保护。

1 个答案:

答案 0 :(得分:0)

这里有一些约束性考虑因素。这有效,但受Rebol 2的'protect函数和上下文的古怪性质的影响:

new: func [
    id' [integer!]
    text' [string!]
    /local object
][
    object: make self []
    object/id: id'
    object/text: text'
    protect bind [ id type text ] 'object
    object
]