例如,给定<@ let x = <@ 1 @> in x @>
and <@ let x = <@@ 1 @@> in x @>
,我可以同时匹配 withPatterns.Let(_, (Patterns.Quote(_) as q), _) -> q
但我无法区分 typed 和 untyped q
。
问问题
130 次
1 回答
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"
但我不确定如何使用它来区分这两种情况。似乎只有查看上下文才能做到这一点(并且可能的上下文太多......)
于 2011-07-04T08:42:17.567 回答