J'ai essayé de créer une fonction qui prend deux entiers A, B comme entrée et retour 5 si A = 1 b = 2 et 6 sinon, voici ce que j'ai fait:
let updateTable (t:Table, r: Result)= let pointmade = pointsMade r match pointmade with |((f,Points s),(f1,Points s1))-> match Map.tryFind f t Map.tryFind f1 t with |None, None -> t |Some Points x, Some Points y ->t .Add (f, Points s+x1) .Add(f1, Points s1+y1)
3 Réponses :
On dirait que vous confondez des arguments du tuple et du curry.
Exemples avec un seul argument tuple (parenthèse est requis). P>
Signature: int * int -> int p> xxx pré>
exemple avec deux arguments au curry: p>
Signature: INT-> INT -> INT P>
//let example3 (a: int) (b: int) = let example3 a b = match a, b with | 1, 2 -> 5 | _ -> 6
Quoi qu'il en soit, le code qui fonctionne ressemble à ceci:
dans votre "code de travail", dans la fonction PointsMade code> Vous n'avez pas besoin d'utiliser la correspondance de motif, vous pouvez simplement utiliser une liaison Let.
let addPoints (team: Team, Points points) (table: Table) =
match Map.tryFind team table with
| None -> table
| Some (Points p) -> Map.add team (Points (points + p)) table
let updateTable (table: Table, result: Result) =
let pts1, pts2 = pointsMade result
table |> addPoints pts1 |> addPoints pts2
Vous manquez une virgule entre
map.tryfind F t code> et
map.tryfind F1 t code>
Merci!! En outre, qu'en est-il de l'erreur que je reçois "t .add (f, points s + x1) .add (F1, points S1 + Y1)"?
Facile, vous devez utiliser des parenthèses:
points (s + x1) code>