1

例如,给定<@ let x = <@ 1 @> in x @>and <@ let x = <@@ 1 @@> in x @>,我可以同时匹配 withPatterns.Let(_, (Patterns.Quote(_) as q), _) -> q但我无法区分 typed 和 untyped q

4

1 回答 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 回答