我正在使用引号,但看不到类型定义的表达式模式。真的没有吗,还是我错过了什么?
<@@ type MyType (name:string) =
member x.Name = name @@>
给出“引号文字中出现意外的关键字‘type’。”
你不能。你只能引用代码,也就是说,任何有效的 F# 表达式 http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc264041877。类型定义不被视为代码,而是定义。
你可能想做的是ReflectedDefinition
类型成员的属性:
type MyType (name : string) =
[<ReflectedDefinition>] member x.Name = name
如果您想检索具有以下成员的 ASTReflectedDefinition
您可以使用Expr.TryGetReflectedDefinition
功能。
例如,此示例代码打印所有反射定义成员的 ASTMyType
:
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 _ -> ()
()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)