F# 模式匹配
我对 F# 中 let
的模式匹配如何工作感到困惑。我使用的是 Visual Studio“F# 交互式”窗口,F# 版本 1.9.7.8。假设我们定义了一个简单类型:
type Point = Point of int * int ;;
并尝试使用 let
与 Point
的值进行模式匹配。
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要在模式两边加上括号:
否则无法将模式与函数绑定区分开来......
You need to put parenthesis around your pattern:
Otherwise there's no way to distinguish the pattern from a function-binding...