2009-12-16 32 views
0

如果Obj是本地的,则下面的新函数不起作用。如果我从/本地删除它的作品。那么该怎么做才能使它与本地的Obj一起工作,谢谢?当然不难为你。Rebol和/ local对象

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: "" 
] 
>> 

也就是说名字和姓氏是 “”,而不是 “约翰”, “李四”

+0

它担任预计当我尝试它。你遇到什么问题? – 2009-12-17 11:13:35

+0

你已经设置了John在测试用例中返回的新值,它是值为{“John”“Doe”}的字符串。 – 2009-12-17 11:16:36

+0

复制错误版本,以便在新的版本中返回Obj。 我的问题是: – 2009-12-17 23:28:00

回答

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

非常感谢你:) – 2010-01-04 15:26:20