2017-01-25 2 views
6

最初に私はf#を初めて使うので、多分答えは明白ですが、私はそれを見ていません。だから私はIDと値を持ついくつかのタプルを持っています。私が探しているidを知っていて、私が渡している3つのうち正しいタプルを選択したいのですが、私はこれを2つのmatchステートメントで入れようとしていましたが、最初のルール。この例では、私は2つのタプルに分割しました。これは私の問題を示しています。コンパイラは "ルールは決してマッチしない"という警告を出していますが、なぜそれは見えません。タプルのルールと一致するF#のパターンは決して一致しません

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

これを行うには良い方法上の任意のヘルプや提案をいただければ幸いです。

答えて

6

when句を使用してください:ここで何が起こっている

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

を使用すると、マッチケースの一部としてtupleIdを使用する場合、あなたはあなたがの右側に参照することができtupleIdと呼ばれる新しい値を導入していることですマッチの場合。これはあなたの関数の引数を陰にします。

タプルの最初の要素に効果的に名前を付けるので、どのタプルも最初のケースと一致し、それで2番目のタプルでは「ルールは一致しません」という警告が表示されます。

+0

完璧、ありがとう!今、私はそれを見て、それは完璧な意味がある、一致の表現もバインドしていることです。 – Jesse

関連する問題