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 _ ->()
()