Eþleþme deyimleriyle (F#)
match İfade desenleri kümesini ifade karşılaştırmaya göre dallanan denetim sağlar.
// Match expression.
match test-expression with
| pattern1 [ when condition ] -> result-expression1
| pattern2 [ when condition ] -> result-expression2
| ...
// Pattern matching function.
function
| pattern1 [ when condition ] -> result-expression1
| pattern2 [ when condition ] -> result-expression2
| ...
Notlar
Desen eşleştirme deyimleri desenler bir dizi test ifade karşılaştırmaya dayalı karmaşık dallanma için izin verir. İçinde match ifade, test-expression her bir desenin turn ve bir eşleşme bulunduğunda, karşılık gelen karşılaştırıldığında result-expression değerlendirilir ve eşleşme ifadenin değeri elde edilen değer döndürülür.
Desen eşleştirme önceki sözdiziminde gösterildiği işlevi, hangi desen eşleştirme hemen argümanda gerçekleştirilir lambda ifadesidir. Desen eşleştirme önceki sözdiziminde gösterildiği işlevi aşağıdakine eşdeğerdir.
fun arg ->
eşleşen arg ile
| pattern1 whencondition -> result-expression1
| pattern2 whencondition-> result-expression2
| ...
Lambda ifadeleri hakkında daha fazla bilgi için bkz: Lambda ifadeleri: Eğlenceli anahtar sözcüğü (F#).
Tüm olası girdi değişkeni ile eşleşen tüm desenleri kümesini kapsamalıdır. Sık sık, joker desen (_) son desen olarak eşleşmeyen önceden herhangi bir giriş değerlerini eşleştirmek için kullanırsınız.
Aşağıdaki kod, hangi yollardan bazılarını gösterir match deyimi kullanılır. Başvuru ve kullanılabilecek olası desen örnekleri için bkz: Desen eşleştirme (F#).
let list1 = [ 1; 5; 100; 450; 788 ]
// Pattern matching by using the cons pattern and a list
// pattern that tests for an empty list.
let rec printList listx =
match listx with
| head :: tail -> printf "%d " head; printList tail
| [] -> printfn ""
printList list1
// Pattern matching with multiple alternatives on the same line.
let filter123 x =
match x with
| 1 | 2 | 3 -> printfn "Found 1, 2, or 3!"
| a -> printfn "%d" a
// The same function written with the pattern matching
// function syntax.
let filterNumbers =
function | 1 | 2 | 3 -> printfn "Found 1, 2, or 3!"
| a -> printfn "%d" a
Desenler üzerinde guards
Kullanabileceğiniz bir when değişkeni bir desenle eşleşen yinelenip yinelenmeyeceği ek bir koşul belirtmek için yan tümcesi. Olarak böyle bir yan tümcesi denir bir koruma. İfade aşağıdaki when anahtar sözcüğü bir eşleşme söz konusu guard ile ilişkili desen yapılmadıkça değil değerlendirildi.
Aşağıdaki örnek bir değişken desen için sayısal bir aralık belirtmek için bir koruma kullanımını göstermektedir. Not birden çok koşul Boole işleci kullanılarak birleştirilir.
let rangeTest testValue mid size =
match testValue with
| var1 when var1 >= mid - size/2 && var1 <= mid + size/2 -> printfn "The test value is in range."
| _ -> printfn "The test value is out of range."
rangeTest 10 20 5
rangeTest 10 20 10
rangeTest 10 20 40
Değerler harfleri dışındaki desende kullanılamaz çünkü kullanması gerektiğini unutmayın bir when giriş değeri karşı bir parçası karşılaştırmak varsa yan tümcesi. Bu, aşağıdaki kodu gösterilir.
// This example uses patterns that have when guards.
let detectValue point target =
match point with
| (a, b) when a = target && b = target -> printfn "Both values match target %d." target
| (a, b) when a = target -> printfn "First value matched target in (%d, %d)" target b
| (a, b) when b = target -> printfn "Second value matched target in (%d, %d)" a target
| _ -> printfn "Neither value matches target."
detectValue (0, 0) 0
detectValue (1, 0) 0
detectValue (0, 10) 0
detectValue (10, 15) 0