2013-07-02 2 views
2

나는 Rebol에서 아주 기본적인 것을 시도 중입니다. 간단한 인스턴스 계층 구조 - question 기본 인스턴스와 일부 question 하위 인스턴스를 갖고 싶습니다. 그리고 나는 보호 된 인스턴스 속성을 원한다.Rebol의 개체 속성 보호

_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 ] 
     ] 
    ] 
] 

그러나 다음이 실패 :

내가 지금하고 있어요 것은 내가 두 번째 인스턴스 qt2을하면

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

, 내가 얻을 :

Script Error: Word id is protected, cannot modify

다음 그런 다음 보호 된 필드를 _question 밖으로 이동하여 question_text에 넣으십시오. 그거. 그러나 그것은 단지 같은 오류로 이어집니다.

참고 : 저는 현재 Rebol2를 사용하고 있지만 Rebol3과 Red에서 실행하는 것이 이상적입니다. 그리고 나는 해킹을 피하고 싶다. (확실하다 - 모호하다. 파이썬 getitem()/setitem() 트릭은 괜찮을 것이다.) 그렇다면 필드를 비보호로 유지하는 것이 좋습니다.

답변

0

몇 가지 바인딩 고려 사항이 있습니다. 단지`바인딩을 12` 표기 :

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

참고이 * * 당신을 새로운 질문/아이디'에서 보호하지 않습니다 :이 작동하지만, REBOL 2의 'protect 기능과 상황의 변덕스러운 성격의 적용을받습니다 [id : 12] new-question'. – rgchris

+0

감사합니다. 광고 된대로 작동하며 해킹 - 임계 값 바로 아래입니다.) –