2009-12-16 2 views
0

Новая функция ниже не работает, если Obj является локальным. Если я удалю его из/local, он будет работать. Итак, что делать, чтобы заставить его работать с местным сообществом Obj? Конечно, не сложно для вас.Rebol and/local Object

Person: make object! [ 

Person: func[FirstName LastName][ 
    Self/FirstName: FirstName 
    Self/LastName: LastName 
    Print Self/FirstName 
    Print Self/LastName 
] 
FirstName: "" 
LastName: "" 

] 



new: func[Class [Object!] Param-Block [block!] /local Obj][ 
    Constructor: to-word pick pick Class 1 2 
    Obj: Make Class [] 
    params: copy "" 
    foreach param Param-Block [ 
     if string? param [ 
     param: rejoin [{"} param {"}] 
     ] 
     append params param 
     append params " " 
    ] 
    do rejoin [{do get in Obj Constructor} { } params] 
    Obj 
] 
;FOR TEST 
John: new Person["John" "Doe"] 

Даст

>> probe John 
make object! [ 
    Person: func [FirstName LastName][ 
     Self/FirstName: FirstName 
     Self/LastName: LastName 
     Print Self/FirstName 
     Print Self/LastName 
    ] 
    FirstName: "" 
    LastName: "" 
] 
>> 

То есть FirstName и LastName являются "" вместо "Джон", "Доу"

+0

Он работал ожидал, когда я попробовал. С какой проблемой вы столкнулись? –

+0

Вы установили значение John, возвращаемое новым, которое в тестовом примере является параметром, который является строкой значения {«John» «Doe»}. –

+0

Скопированная плохая версия, так исправленная, чтобы вернуть Obj в новую. Моя проблема: –

ответ

3

Это работает ...

rebol [] 

    Person: make object! [ 
     Person: func [ names] [ 
      Self/FirstName: names/1 
      Self/LastName: names/2 
     ] 
     FirstName: copy "" 
     LastName: copy "" 
    ] 

    new: func [class [object!] param-block [block!] 
     /local obj constructor 
    ] [ 
     constructor: second first class 
     obj: make class [] 
     do get in obj constructor copy param-block 
     obj 
    ] 

    test: new person [ "John" "Doe" ] 
    probe test 

    make object! [ 
     Person: func [names][ 
      Self/FirstName: names/1 
      Self/LastName: names/2 
     ] 
     FirstName: "John" 
     LastName: "Doe" 
    ] 

    test2: new person [ "Dick" "Nixon" ] 
    probe test2 

    make object! [ 
     Person: func [names][ 
      Self/FirstName: names/1 
      Self/LastName: names/2 
     ] 
     FirstName: "Dick" 
     LastName: "Nixon" 

] 
+0

Спасибо большое :) –