Smalltalk singleton pattern: как инициализировать переменные экземпляра?

У меня возникли проблемы с получением шаблона singleton для инициализации переменной экземпляра в smalltalk. (здесь ссылка на другую реализацию для пояснения)

это то, что у меня есть:

new

^UniqueInstance ifNil: [UniqueInstance := self basicNew.
                        UniqueInstance: instanceVar := Object new. ].

что последняя строка (UniqueInstance: instanceVar: = Object new.) не работает, но в основном что мне нужно сделать: экземпляр instanceVar как объект перед возвратом UniqueInstance обратно вызывающему.

Обратите внимание, что этот "новый" метод используется как условие включения класса, а библиотеки - это переменная экземпляра UniqueIsntance (isntance желаемого класса).

Может ли кто-нибудь указать мне в правильном направлении?

Ответ 1

Попробуйте проще:

YourClass class>>singleton

       UniqueInstance ifNil: [UniqueInstance := self basicNew initialize].
       ^UniqueInstance

то на стороне экземпляра вашего класса реализуется соответствующий метод #initialize, например:

YourClass>>initialize

          someInstvar := someInitalValue.
         ^self

Обновление:. Имя метода класса, обращающегося к Singleton, меняется, оно может быть #default, #current или #singleton. В основном я использую позже.