.net F#模式匹配

.net F#模式匹配,.net,f#,pattern-matching,.net,F#,Pattern Matching,我对模式匹配在F#forlet中的工作方式感到困惑。我正在使用Visual Studio的“F#interactive”窗口,F#version 1.9.7.8。假设我们定义一个简单类型: type Point = Point of int * int ;; 并尝试使用let与点的值进行模式匹配 let Point(x, y) = Point(1, 2) in x ;; 失败,错误为FS0039:未定义值或构造函数“x”。如何将模式匹配与let结合使用 最奇怪的是: let Point(x,

我对模式匹配在F#for
let
中的工作方式感到困惑。我正在使用Visual Studio的“F#interactive”窗口,F#version 1.9.7.8。假设我们定义一个简单类型:

type Point = Point of int * int ;;
并尝试使用
let
点的值进行模式匹配

let Point(x, y) = Point(1, 2) in x ;;
失败,错误为FS0039:未定义值或构造函数“x”
。如何将模式匹配与
let
结合使用

最奇怪的是:

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

按预期返回1。为什么?

您需要在模式周围加上括号:

let (Point(x, y)) = Point(1, 2) in x ;;
否则就无法区分模式和函数绑定