F# 模式匹配

发布于 2024-08-22 07:54:25 字数 464 浏览 10 评论 0原文

我对 F# 中 let 的模式匹配如何工作感到困惑。我使用的是 Visual Studio“F# 交互式”窗口,F# 版本 1.9.7.8。假设我们定义了一个简单类型:

type Point = Point of int * int ;;

并尝试使用 letPoint 的值进行模式匹配。

let Point(x, y) = Point(1, 2) in x ;;

失败并显示错误 FS0039:未定义值或构造函数“x”。应该如何使用 let 进行模式匹配?

最奇怪的是:

let Point(x, y) as z = Point(1, 2) in x ;;

按预期返回 1。为什么?

I'm puzzled by how pattern matching works in F# for let. I'm using the Visual Studio 'F# interactive' window, F# version 1.9.7.8. Say we define a simple type:

type Point = Point of int * int ;;

and the try to pattern match against values of Point using let.

let Point(x, y) = Point(1, 2) in x ;;

fails with error FS0039: The value or constructor 'x' is not defined. How is one supposed to use pattern matching with let?

The most curious thing is that:

let Point(x, y) as z = Point(1, 2) in x ;;

returns 1 as expected. Why?

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

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

发布评论

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

评论(1

萌︼了一个春 2024-08-29 07:54:25

您需要在模式两边加上括号:

let (Point(x, y)) = Point(1, 2) in x ;;

否则无法将模式与函数绑定区分开来......

You need to put parenthesis around your pattern:

let (Point(x, y)) = Point(1, 2) in x ;;

Otherwise there's no way to distinguish the pattern from a function-binding...

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