2017-01-25 44 views
6

İlk kapanma f # için yeniyim, belki de cevap açık, ama ben onu göremiyorum. Bu yüzden bir kimliğe ve değere sahip bir takım ilişkilerim var. Aradığım kimliği biliyorum ve geçmekte olduğum üç kişiden doğru tuple seçmek istiyorum. Bunu, diğeriyle iç içe geçmiş iki eşleşme ifadesiyle yapacağım, ama her şey ilk kural. Bu örnek için, bu sorunu gösterdiğimden iki parçalıya indirdim. Derleyici bir "kural asla eşleşmeyecek" uyarısı veriyor, ama nedenini anlamıyorum.F # tuples kuralıyla eşleşen desen hiçbir zaman eşleşmeyecek

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

Bunu yapmak için daha iyi bir yol hakkında herhangi bir yardım veya öneri çok takdir edilecektir.

cevap

6

bir when maddesini kullanın:

let selectTuple tupleId tuple1 tuple2 = 
    match tuple1 with 
    | (x, _) when x = tupleId -> tuple1 
    | _ -> tuple2 
Ne oluyor burada eşleşme durumunda bir parçası olarak tupleId kullandığınızda, size sağ tarafında başvurabilirsiniz tupleId adlı yeni bir değer tanıtmak olduğunu

maç davası. Bu işlev argümanınızı gölgeler.

Bir tuple'ın yalnızca ilk elemanına etkili bir ad verdiğiniz için, herhangi bir sayı ilk durumda eşleşecektir ve bu, ikincisindeki "kuralın eşleşmeyeceği" uyarısı alır.

+0

Mükemmel, çok teşekkürler! Gördüğüm kadarıyla, bu mükemmel bir anlam ifade ediyor, çünkü bu maç ifadeleri de bağlayıcı oluyor. – Jesse