Kommutativität in Operatoren

8

In C # gibt es keinen eingebauten Begriff der Kommutativität in der Sprache. Das heißt, wenn ich zum Beispiel eine einfache Vector -Klasse definiere:

%Vor%

Ich muss immer noch den symmetrischen Operator +(double d, Vector v) definieren oder jeder Ausdruck der Form 2.1 * v wird einen Kompilierungsfehler ergeben oder zur Laufzeit in einem dynamischen Szenario fehlschlagen.

Meine Frage ist zweifach: Erstens, gibt es Sprachen, in denen man kommutative Operatoren definieren kann, ohne beide möglichen Operandenkombinationen definieren zu müssen? Mit anderen Worten, gibt es Sprachen, die sich des Begriffs der Kommutativität bewusst sind? Und zweitens, wurde es jemals in C # berücksichtigt und verschrottet, da es wirklich nur syntaktischer Zucker ist, um ein paar zusätzliche Tastenanschläge zu vermeiden, die der Sprache nicht wirklich viel hinzufügen (und höchstwahrscheinlich ein zusätzliches reserviertes Wort benötigen würden)? / p>     

InBetween 04.06.2013, 14:59
quelle

1 Antwort

7
  

Gibt es Sprachen, in denen Sie kommutative Operatoren definieren können, ohne dass Sie beide möglichen Operandenkombinationen definieren müssen?

Ich bin mir nicht bewusst, aber das heißt nicht, dass sie nicht existieren.

  

Wurde es jemals in C # berücksichtigt und verschrottet, da es nur syntaktischer Zucker ist, um ein paar zusätzliche Tastenanschläge zu vermeiden, die der Sprache nicht wirklich viel hinzufügen (und höchstwahrscheinlich ein zusätzliches reserviertes Wort benötigen)? / p>

Nach meinem Wissen wurde es nie in Betracht gezogen. Es war sicherlich nie auf der Liste der möglichen Sprachverbesserungen, und ich kann mich nicht erinnern, es im Archiv der Design-Notizen gesehen zu haben.

Sie machen ein ausreichendes Argument gegen das Feature in Ihrer Frage. Wenn ich gebeten würde, eine zusätzliche Kritik des vorgeschlagenen Merkmals zu geben, würde ich darauf hinweisen, dass viele überlastete Operatoren nicht kommutativ sind, selbst wenn ihre mathematischen Gegenstücke kommutativ sind. Der String "addition" zum Beispiel ist eindeutig nicht kommutativ, obwohl beide Operanden Strings sind. Und das gleiche gilt für den Delegierten "Zusatz". Und es gibt viele andere Eigenschaften von Operatoren, die ebenso nützlich oder besser wären, als dass ich sie vor der automatischen Kommutation einsetzen würde.

    
Eric Lippert 04.06.2013, 15:35
quelle

Tags und Links