Я пробую что-то довольно простое в 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, я получаю:
Ошибка сценария: идентификатор слова защищен, не может быть изменен
Следующая идея - переместить защищенные поля из _question
и поместить их в question_text
- даже если мне это не нравится. Но это просто приводит к той же ошибке.
Примечание: в настоящее время я делаю это с помощью Rebol2, но в идеале я бы также запустил свои вещи в Rebol3 и Red. И я бы хотел избежать взломов (конечно - это расплывчато, вроде уловок Python getitem()/setitem()
подойдут). Тогда я бы предпочел, чтобы поля были незащищенными.