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"

2 番目のインスタンスを qt2 にすると、次のようになります。

スクリプト エラー: Word ID は保護されているため、変更できません

次のアイデアは、保護されたフィールドを移動してそこに_question入れることquestion_textです-たとえそれが気に入らなくても。しかし、それは同じエラーにつながります。

注: 私は現在これを Rebol2 で行っていますが、理想的には Rebol3 と Red でも実行できるようにしたいと考えています。そして、私はハッキングを避けたいと思っています (確かに - それはあいまいです。Python のgetitem()/setitem()トリックのようなものは問題ありません)。次に、フィールドを保護しないことをお勧めします。

4

1 に答える 1