我正在玩引号,我看不到类型定义的表达模式.真的没有,或者我错过了什么?
<@@ type MyType (name:string) =
member x.Name = name @@>
Run Code Online (Sandbox Code Playgroud)
在引号文字中给出"意外的关键字'类型'."
Str*_*ger 10
你不能.您只能引用代码,也就是说任何有效的F#表达式.类型定义不被视为代码,而是定义.
您可能想要做的是将ReflectedDefinition属性放在类型成员上:
type MyType (name : string) =
[<ReflectedDefinition>] member x.Name = name
Run Code Online (Sandbox Code Playgroud)
如果要检索具有ReflectedDefinition可以使用Expr.TryGetReflectedDefinition功能的成员的AST .
例如,此示例代码打印所有反射定义成员的AST MyType:
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 _ -> ()
()
Run Code Online (Sandbox Code Playgroud)