2010-07-28 13 views
9

Teklifler ile oynamaktayım ve tür tanımları için bir ifade kalıbı göremiyorum. Gerçekten bir tane yok mu, yoksa bir şeyi mi özlüyorum?F #: Tür tanımına sahip tırnak mı?

<@@ type MyType (name:string) = 
    member x.Name = name @@> 

"Satır hazırlamında" türünde beklenmeyen "anahtar kelime" verir.

cevap

10

Yapamazsınız. Sadece kod koyabilirsiniz, yani valid F# expression. Tip tanımları kod olarak değil, tanım olarak kabul edilir. Eğer yapmak isteyebilirsiniz ne

konur ReflectedDefinition niteliğini türüdür üyeleri: Eğer ReflectedDefinition bulunan üyelerin AST almak isterseniz Expr.TryGetReflectedDefinition işlevini kullanabilirsiniz

type MyType (name : string) = 
    [<ReflectedDefinition>] member x.Name = name 

. MyType tüm yansıyan tanımı elemanlarının

Örn bu örnek kod yazdırılır Varış yerini- zi:

open Microsoft.FSharp.Quotations 
open System.Reflection 

type MyType (name : string) = 
    [<ReflectedDefinition>] member x.Name = name 

let mis = typeof<MyType>.GetMembers() 
for mi in mis do 
    try 
     match Expr.TryGetReflectedDefinition(mi :?> MethodBase) with 
     | Some(e) -> printfn "%A" e 
     | None ->() 
    with _ ->() 
()