Right, that's why there's #perform:withArguments:inSuperclass: . Amazingly,
#perform:withArguments:inSuperclass: works only if the superclass is in the
lookup chain but does not necessarily requires the direct superclass.

Let's say A inherits from B inherits from C.

A>>foo
     ^ #c
B>>foo
     ^ #b
C>>foo
     ^ #c
A>>superSend
     ^ super foo

A new foo "answers a"
A new superSend "answers b"

And you cannot directly reach c, however:

A new perform: #foo withArguments: #( ) inSuperclass: A "answers a"
A new perform: #foo withArguments: #( ) inSuperclass: B "answers b"
A new perform: #foo withArguments: #( ) inSuperclass: C "answers c"
A new perform: #foo withArguments: #( ) inSuperclass: Object "DNU"
A new perform: #foo withArguments: #( ) inSuperclass: UndefinedObject
"class not in my lookup chain"

Ah the dark side of the force. Always tempting but so dangerous in the long
term.


2014-02-03 Benjamin <benjamin.vanryseghem.ph...@gmail.com>:

> On 03 Feb 2014, at 16:26, Norbert Hartl <norb...@hartl.name> wrote:
>
> I just wanna share my newest finding in producing endless loops.
>
> foo
>    super perform: #foo
>
> Somehow I like it! :)
>
>
> Should confuse a lot of JAVA-ist :P
>
> Ben
>

Reply via email to