我对F#中let
的模式匹配工作方式感到困惑。我正在使用Visual Studio的'F#interactive'窗口,F#版本1.9.7.8。假设我们定义了一个简单的类型:
type Point = Point of int * int ;;
并尝试使用Point
模式匹配let
的值。
let Point(x, y) = Point(1, 2) in x ;;
以error FS0039: The value or constructor 'x' is not defined
失败。如何使用与let
进行模式匹配?
最奇怪的是:
let Point(x, y) as z = Point(1, 2) in x ;;
按预期返回1。为什么呢?
答案 0 :(得分:10)
您需要在模式周围添加括号:
let (Point(x, y)) = Point(1, 2) in x ;;
否则,无法区分模式与功能绑定...