2012-03-09 32 views
11

İlk maç çalışır, ancak ikincisi değil. Bir if/elif zinciri kullanmanın yanında değişkenler bildirmeden eşleştirmenin bir yolu var mı?fsharp ile eşleşme

(I değişken t maç yaparken, değer ELEM kullanmak Not)

let t = typeof<string> 
    match propType with 
    | t    -> elem.GetValueAsString() :> obj 
    | typeof<string> -> elem.GetValueAsString() :> obj 
+0

bir nesnenin arka plan türünü bağlı maç çalışıyor ya da sonucu hakkında sadece şaşkın edildi mıydı? –

+0

no Tipim var ve tür değişkenimin temel türü her zaman Tip olacaktır. – nicolas

cevap

12

İlk model aslında typeof<string> eşleşmiyor. propType'u t numaralı yeni t numaralı bağlantıya bağlar ve typeof<string>'a eşittir.

typeof<string>, bir tamsayı değil, ikinci kalıp da işe yaramaz (örneğinizde gereksiz bir desen olmasına rağmen). Kullanabileceğiniz

match propType with 
    | t when t = typeof<string> -> elem.GetValueAsString() :> obj 
    | t -> elem.GetValueAsString() :> obj 
+0

gerçekten. acemi tuzağı. Benim durumumda yeniden eşleşmesi ... – nicolas

6

bir değerin türüne karşı maç çalışıyorsanız: Sen şöyle when nöbet kullanmak zorunda:? Operatör

Örnek:

let testMatch (toMatch:obj) = match toMatch with 
         | :? string as s -> s.Split([|';'|]).[0] 
         | :? int as i -> (i+1).ToString() 
         | _ -> String.Empty 
+2

benim için toMatch türüdür. bu yüzden sadece muhafızlar afaik çalışır. – nicolas

+0

Tamam, boşver;) –

+1

Bu belirli sorunun cevabı değildi, ama benim sorum oldu. :) –

İlgili konular