从嵌套对象中包含对象获取插槽

时间:2014-08-12 11:12:33

标签: iolanguage

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

示例:

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

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

从上面的代码中,我在访问Bar时在嵌套对象Foo中遇到异常:

Exception: Object does not respond to 'Foo'

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

这样的事情
Foo := Object clone do(
    someSlot := "Some value"

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

并在folder/bar.io中根据需要使用Foo someSlot

想想例如someSlot作为数据库连接,Bar作为需要该数据库连接的数据模型。

1 个答案:

答案 0 :(得分: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
        )
    )
    
  3. 虽然不是一个完美的解决方案,但它应该能够很好地满足我的目的。