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