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 🙂


Anmelden zum Antworten