Ключевым моментом двойной отправки является то, что путем замены ресивера и аргумент первичного сообщения, вы вызываете второй раз виртуальный вызов, а затем получаете эффект выбора метода на основе приемника сообщения и его аргумента. Поэтому вам нужно иметь сообщение с аргументом.
Вот типичный пример двойной отправки: добавление целого числа и поплавка и выполнение адекватного преобразования.
Integer>>+ arg
^arg sumFromInteger: self
Float>>+ arg
^arg sumFromFloat: self
Integer>>sumFromInteger: anInt
<primitive adding to ints>
Integer>>sumFromFloat: aFloat
^self asFloat + aFloat
Float>>sumFromFloat: aFloat
<primitive adding two floats>
Float>>sumFromInteger: anInt
^self + anInt asFloat
Теперь 1 + 1,0 ударит первый + на Integer, то sumFromInt: то +, то sumFromFloat. Обратите внимание, что у нас достаточно информации, поэтому мы могли бы сократить время вызова + +
Что показывает пример: во время первого вызова динамическое разрешение сообщений находит на методе (поэтому оно определяется как динамический случай), а затем путем замены аргумент и получатель, разрешение динамического сообщения выполняет другой случай, основанный на аргументе. Поэтому в конце вы получаете метод, выбранный с использованием двух объектов исходного вызова. Теперь о вашем вопросе: в сообщениях класса Pharo динамически просматриваются, поэтому вы можете внедрять методы создания экземпляров, используя двойную отправку без проблем, но цель неясна.
MyClass class>>newWith: arg
arg newFromMyClass: aClass
Как отметил Эстебан, в вкусе Squeak/Pharo хорошо себя вести, что каждый новый посылает инициализацию, поэтому он будет basicNew инициализироваться. –