2017-01-25 43 views
6

Po pierwsze jestem nowy dla f #, więc może odpowiedź jest oczywista, ale nie widzę tego. Mam więc kilka krotek z identyfikatorem i wartością. Znam id, którego szukam i chcę wybrać poprawną krotkę z trzech, które przechodzę. Miałem zamiar zrobić to z dwoma instrukcjami dopasowań, które jeden zagnieżdżono w drugim, ale wszystko pasuje do pierwsza zasada. W tym przykładzie ograniczyłem go do dwóch krotek, ponieważ pokazuje to mój problem. Kompilator podaje ostrzeżenie "reguła nigdy nie będzie dopasowana", ale nie rozumiem dlaczego.Dopasowanie wzorca F z regułą krotek nigdy nie będzie dopasowane

let selectTuple tupleId tuple1 tuple2 = 
    match tuple1 with 
    | (tupleId, _) -> tuple1 
    | _ -> tuple2 

Każda pomoc lub sugestie dotyczące lepszej metody wykonania byłoby bardzo mile widziane.

Odpowiedz

6

Użyj when klauzuli:

let selectTuple tupleId tuple1 tuple2 = 
    match tuple1 with 
    | (x, _) when x = tupleId -> tuple1 
    | _ -> tuple2 

Co się tu dzieje jest to, że podczas korzystania z tupleId jako części obudowy zespół Państwo wprowadzić nową wartość o nazwie tupleId, które można odnieść do po prawej stronie przypadek dopasowania. To cienie twojego argumentu funkcji.

Ponieważ skutecznie podajesz tylko nazwę pierwszemu elementowi krotki, każda krotka będzie pasować do pierwszego przypadku, a na tej podstawie otrzymasz ostrzeżenie "reguła nie będzie dopasowana".

+0

Idealne, wielkie dzięki! Teraz, kiedy to widzę, ma to sens, ponieważ wyrazy dopasowania również wiążą. – Jesse