2

我正在 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 中运行。而且我想避免黑客攻击(当然 - 这很模糊,像 Pythongetitem()/setitem()技巧之类的东西就可以了)。然后我宁愿让这些领域不受保护。

4

1 回答 1

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
]
于 2013-07-03T22:59:36.997 回答