In C# gibt es keinen integrierten Begriff der Kommutativität in der Sprache. Das ist, wenn ich eine einfache Vector
Klasse zum Beispiel definieren:Kommutativität in Operatoren
public struct Vector
{
private readonly double x, y, z;
...
public static Vector operator +(Vector v, double d) {...}
}
Ich werde noch den symmetrischen Operator +(double d, Vector v)
oder ein beliebigen Ausdruck des Formulars definieren muß 2.1 * v
einen Übersetzungsfehler geben 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)?
Kommutativität mit einer Zeile definieren: 'public static Vektoroperator + (double d, Vektor v) {return v + d;}' –
Ich glaube, dass Haskell dies sofort unterstützt. Das und Prolog. Es ist fast 8 Jahre her, also könnte ich mich irren. – Haney
Überprüfen Sie diese Frage (und Antworten) http://stackoverflow.com/questions/7385937/why-must-i-define-a-kommutative-operator-twice –