是否可以区分类型化和非类型化的嵌套引用?

发布于 2024-11-18 05:21:22 字数 228 浏览 4 评论 0原文

例如,给定 <@ let x = <@ 1 @>;在 x @><@ let x = <@@ 1 @@>;在 x @> 中,我可以将两者与 Patterns.Let(_, (Patterns.Quote(_) as q), _) -> 相匹配q 但我无法区分类型化和非类型化 q

For example, given <@ let x = <@ 1 @> in x @> and <@ let x = <@@ 1 @@> in x @>, I can match both with Patterns.Let(_, (Patterns.Quote(_) as q), _) -> q but I can't differentiate between the typed and untyped q.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

羁绊已千年 2024-11-25 05:21:22

有趣的。似乎引文总是以键入的形式存储。

引号内的 <@@ 1 @@> 子表达式的类型始终为 Expr。但是,变量 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"

但我不确定如何使用它来区分一般情况下的两种情况。似乎只有查看上下文才能做到这一点(而且可能的上下文太多了......)

Interesting. It seems that quotations are always stored in the typed form.

The type of the <@@ 1 @@> sub-expression inside the quotation is always Expr<int>. However, the type of the variable x differs in your two quotations:

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

But I'm not sure how to use this to differentiate between the two cases in general. It seems that you can only do that if you look at the context (and there are just too many possible context...)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文