16 Stimmen

Optionale Parameter und Optionstypen mit F#

Betrachten Sie den folgenden Code:

type Test () =
  member o.fn1 (?bo) = 1
  member o.fn2 (?bo) = o.fn1 bo

  member o.fn3 (?bo) = 1 + bo.Value
  member o.fn4 (?bo) = o.fn3 bo

Während fn1 y fn2 funktionieren sehr gut, fn4 erzeugt den folgenden Fehler:

init.fsx(6,30): Fehler FS0001: Dieser Ausdruck sollte den Typ int haben, hat aber hier den Typ 'a option

MSDN Staaten:

Optionale Parameter werden als F#-Optionstyp interpretiert, so dass Sie sie auf die übliche Weise abfragen können, wie Optionstypen abgefragt werden, indem Sie einen Match-Ausdruck mit Some und None verwenden.

Für mich werden optionale Parameter nicht als F#-Optionstyp interpretiert, da der Code sonst kompiliert werden würde. Außerdem verstehe ich nicht, warum, wenn ich den Mauszeiger über ?bo en fn3 der Tooltip sagt val bo: int option aber von außen erwartet nur int . Ich würde ein Verhalten erwarten, bei dem nichts, int, Some int und None akzeptiert werden. Und als letzte Anmerkung, ich verstehe nicht, warum fn2 funktioniert aber fn4 nicht.

Danke für die Klarstellung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X