Получить слот из содержащего объекта во вложенном объекте
У меня есть набор вложенных объектов, и мне нужно получить слот из содержащего объекта. Это можно сделать?
Пример:
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
как модель данных, нуждающаяся в этом соединении с базой данных.
1 ответ
Я решил, создав 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 ) )
Хотя это и не идеальное решение, оно должно работать достаточно хорошо для моих целей.