2017-07-14 22 views
5

Diyelim ki böyle bir şeyim var. Derleme yapmıyor, ama yapmaya çalıştığım şeyi görebilirsiniz. Ben her şekilde google denedim, ama hiçbir zar. Bu yapılabilir mi?Statik olarak çözümlenen bir tür parametresi alabilir miyim?

let inline read (s:string) : ^x = 
    let parsed = (^x : (static member ofString: string -> ^x option) (s)) 

    // this is the bit I'm not sure how do to. This doesn't compile. 
    // I'm trying to determine what the statically chosen type for ^x is. 
    let t = typeof<^x> 

    match parsed with 
    | Some y -> y 
    | None -> failwithf "can't parse %s into %s" s (t.Name) 

cevap

9

Bu iyi çalışır ve statik olarak çözümlenmiş parametrelere typeof kullanabilirsiniz - Sorun aynı zamanda bir operatör olarak çözümlenebilir, çünkü ayrıştırıcı, <^ başa çıkamaz olmasıdır.

sadece ^x etrafında boşluk ekleyerek kolayca düzeltebilirim:

let t = typeof<^x> 
+2

Aw adam, bu iç karartıcı! Araştırmak için yeterince uzun sürdü ve daha sonra boş bir alana ihtiyacım olduğunu öğrenmek için, yığın akışını! – Daniel

İlgili konular