Funktion <=> Instanz
-
Jetzt wo ich darüber nachdenke ist es eigentlich auch logisch, dass ->* ein eigener Operator ist. Es gibt Funktion und Funktionspointer aber keine Funktionsvariablen oder Funktionsreferenzen. Was ist der Type von *foo wenn foo eine Funktion ist? foo selbst. Eine Funktion ist aber keine Variable und Funktionsreferenzen gibt es auch nicht.
Wenn nun ->* eine Combo aus -> und * wäre (wie der Syntax ja einläd zu glauben) dann müsste * den Funktionspointer dereferenzieren und dann die Funktion zurückgeben. Geht aber nicht da eine Funktion keine Variable ist und Funktionsreferenzen gibt es auch nicht.
Entweder man macht jetzt aus ->* einen eigenen Operator oder man lässt * einen Pointer zurückgeben den anschließend vom Compiler dereferenziert wird (der kann das Unmögliche wahr machen
) also dereferenziert der * eigentlich gar nichts. Bei:
a->*b
würde also -> aus a ein Klassenpointer machen und * aus b einen Methodenpointer und das ganze wäre glöst.
Nun:
*foo==foo
ergibt aber true wenn foo eine Funktion ist. Da man hier bereits aller Logik widerspricht seh ich eigentlich nicht wieso man für den Fall ->* eine Ausnahme macht und man könnt doch wenigstens konsekent der Logik widersprechen.
-
Dann merkt man es eben daran, dass man nicht A-> *B schreiben kann