9
我玩着引號,我看不到類型定義的表達模式。是真的沒有一個,還是我錯過了什麼?F#:帶類型定義的報價?
<@@ type MyType (name:string) =
member x.Name = name @@>
在引用文字中給出「Unexpected keyword'type'」。
我玩着引號,我看不到類型定義的表達模式。是真的沒有一個,還是我錯過了什麼?F#:帶類型定義的報價?
<@@ type MyType (name:string) =
member x.Name = name @@>
在引用文字中給出「Unexpected keyword'type'」。
你不行。您只能引用代碼,也就是說,任何valid F# expression。類型定義不被視爲代碼,而是定義。
你可能想要做的是把ReflectedDefinition
屬性上一個類型的成員:
type MyType (name : string) =
[<ReflectedDefinition>] member x.Name = name
如果你想檢索具有ReflectedDefinition
成員的AST可以使用Expr.TryGetReflectedDefinition
功能。
E.g,此示例代碼打印MyType
所有反射定義成員的AST:
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 _ ->()
()