Sie möchten eine Funktion schreiben, die eine variable Anzahl von unterschiedlich typisierten Parametern hat. Das ist in dynamisch typisierten Sprachen (Javascript, Python, Ruby) üblich, aber in typisierten Sprachen normalerweise nicht erlaubt. Ulme erlaubt es nicht. Sie
updateRec : Rec -> Maybe Int -> Maybe Int -> Maybe Int -> Rec
updateRec r a b c =
{ r
| a = a |> Maybe.withDefault r.a
, b = b |> Maybe.withDefault r.b
, c = c |> Maybe.withDefault r.c
}
Wenn die Datensatzfelder sind alle vom gleichen Typ (hier Int
):
Sie können parameterswith der Maybe
Typ, das Verständnis Nothing
als „fehlendes Argument“, eine variable Anzahl von unterschiedlich typisierte emulieren akzeptieren könnte ein List Int
statt:
updateRec : Rec -> List Int -> Rec
updateRec r fields =
case fields of
[a] -> { r | a = a }
[a,b] -> { r | a = a, b = b }
[a,b,c] -> { r | a = a, b = b, c = c }
_ -> r
ich mag diese Lösung nicht, weil Sie es wird unbemerkt fehlschlagen, wenn Sie versehentlich eine Liste mit 0 oder 4+ Elemente liefern. Wenn diese Funktion für Sie trotzdem hilfreich ist, wäre es vielleicht besser, List Int
anstelle von Rec
zu verwenden.
Ich mag das viel besser. – lifebalance