我有一组嵌套对象,需要从包含对象中获取一个插槽。可以吗?
示例:
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
作为需要该数据库连接的数据模型。
答案 0 :(得分:0)
我通过在嵌套对象中创建一个intialize
方法来解决,该方法将包含对象作为参数并返回self
(即嵌套对象。
所以我可以有两个这样的文件:
a.io
Foo := Object clone do(
foo := "foobar"
Bar := doRelativeFile("./b.io") initialize(thisContext)
)
b.io
Bar := Object clone do(
initialize := method(parent,
writeln("parent foo is ", parent foo)
return self
)
)
虽然不是一个完美的解决方案,但它应该能够很好地满足我的目的。