F#:带有类型定义的引用?
我正在使用引号,但看不到类型定义的表达式模式。真的没有吗,还是我错过了什么?
<@@ type MyType (name:string) =
member x.Name = name @@>
给出“引号文字中出现意外的关键字‘type’。”
I'm playing around with quotations and I can't see an expression pattern for type definitions. Is there really not one, or am I missing something?
<@@ type MyType (name:string) =
member x.Name = name @@>
Gives "Unexpected keyword 'type' in quotation literal."
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你不能。您只能引用代码,也就是说,任何 有效的 F# 表达式。类型定义不被视为代码,而是定义。
您可能想要做的是将
ReflectedDefinition
属性放在类型成员上:如果您想检索具有
ReflectedDefinition
的成员的 AST,您可以使用Expr.TryGetReflectedDefinition
函数。例如,此示例代码打印
MyType
的所有反射定义成员的 AST:You can't. You can only quote code, that is to say, any valid F# expression. Type definitions are not considered as code, but definitions.
What you might want to do is put
ReflectedDefinition
attribute on a type members:If you want to retrieve the AST of members that have
ReflectedDefinition
you can useExpr.TryGetReflectedDefinition
function.E.g, this sample code prints ASTs of all reflected definition members of
MyType
: