Tupled Argumente in Schnittstellen

8

Kann jemand diese F # Neugier erklären?

%Vor%

Was ist der Bedeutungsunterschied zwischen den Definitionen von IFoo.Bar1 und IFoo.Bar3 ?

    
Akash 27.11.2014, 13:13
quelle

1 Antwort

9

Hier kann der Eingabetyp zwei verschiedene Dinge beschreiben: ein Tupel oder die Argumentliste einer CLI-Methode.

Dies macht keinen Unterschied beim Rückgabetyp, da die einzige Interpretation dieses Rückgabetyps ein Tupel ist. In der Argumentliste können Sie jedoch zwischen einer CLI-Methode wählen, die zwei Argumente benötigt, oder einer CLI-Methode, die ein Argument verwendet, bei dem es sich um ein Tupel handelt. Letzteres wird durch die zusätzlichen Klammern bezeichnet.

Aus diesem Grund können Sie Bar3 mit einem einzigen Argument als Tupel implementieren, was mit den anderen nicht möglich ist (ab F # 3) .

Dies ist auch eine Stelle, an der doppelte Klammern für einzelne Klammern einen Unterschied machen. Wenn Bar3 nicht abstrakt wäre, könnten Sie die Tupeleingabe erzwingen, indem Sie sie als member this.Bar3 ((arg1, arg2)) deklarieren.

Methodenargumentlisten verfügen über zusätzliche Funktionen, z. B. optionale Argumente. Also:

%Vor%

Die letzte Zeile enthält den Fehler "Optionale Argumente sind nur für Typmember zulässig", da b jetzt Teil eines Tupelmusters ist und kein Argument in der Argumentliste der Methode.

    
Vandroiy 27.11.2014, 13:37
quelle

Tags und Links