【问题标题】:Rebol and /local ObjectRebol 和 /local 对象
【发布时间】:2009-12-16 20:49:03
【问题描述】:

如果 Obj 是本地的,则下面的新功能将不起作用。如果我从 /local 中删除它,它可以工作。那么如何使它与本地 Obj 一起工作,谢谢?对你来说当然不难。

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 是 "" 而不是 "John" "Doe"

【问题讨论】:

  • 当我尝试它时,它按预期工作。你遇到了什么问题?
  • 你已经为 John 设置了 new 返回的值,在测试用例中是 params,它是值 {"John" "Doe" } 的字符串。
  • 复制了错误版本,因此更正以返回新的 Obj。我的问题是:
  • FirstName 和 LastName 是 "" 而不是 "John" "Doe" 请参阅问题更新。如果 Obj 不是本地的,它可以工作。

标签: rebol


【解决方案1】:

这行得通...

    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"

]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多