是否可以区分有类型和无类型的嵌套引用?

时间:2011-07-04 04:14:56

标签: f# quotations

例如,在给定<@ let x = <@ 1 @> in x @><@ let x = <@@ 1 @@> in x @>的情况下,我可以将其与Patterns.Let(_, (Patterns.Quote(_) as q), _) -> q匹配,但我无法区分已键入和未列出的q

1 个答案:

答案 0 :(得分:2)

有趣。似乎引用始终以键入的形式存储。

引号内的<@@ 1 @@>子表达式的类型始终为Expr<int>。但是,变量x的类型在您的两个引用中有所不同:

match q1 with
| Patterns.Let(v, (Patterns.Quote(_) as q), _) when v.Type = typeof<Expr> -> "untyped"
| Patterns.Let(_, (Patterns.Quote(_) as q), _) -> "typed"
| _ -> "other"

但我不确定如何使用它来区分这两种情况。看来你只能看一下上下文(并且有太多可能的上下文......)