1

我有一组嵌套对象,需要从包含对象中获取一个插槽。可以做到吗?

例子:

Foo := Object clone do(
    a := "hello"

    Bar := Object clone do(
        b := Foo a  # How to get `Foo a` here?
    )
)

Bar从上面的代码中,访问时嵌套对象中出现异常Foo

例外:对象不响应“Foo”

我希望将这些作为嵌套对象的原因是因为它可以更容易(IMO)使应用程序更加模块化。如果可能的话,我可以轻松地做类似的事情

Foo := Object clone do(
    someSlot := "Some value"

    Bar := doRelativeFile("./folder/bar.io")
)

并在需要时folder/bar.io使用Foo someSlot

例如someSlot,将其视为数据库连接,以及Bar需要该数据库连接的数据模型。

4

1 回答 1

0

我通过intialize在嵌套对象中创建一个方法来解决,该方法将包含对象作为参数并返回self(即嵌套对象。

所以我可以有两个这样的文件:

  1. a.io

    Foo := Object clone do(
        foo := "foobar"
    
        Bar := doRelativeFile("./b.io") initialize(thisContext)
    )
    
  2. b.io

    Bar := Object clone do(
        initialize := method(parent,
            writeln("parent foo is ", parent foo)
            return self
        )
    )
    

虽然不是一个完美的解决方案,但它应该足以满足我的目的。

于 2014-08-12T14:31:14.860 回答