具有以下类型:
type MyType =
| MyType of string
我试着这样做:
let myFunc x =
let MyType y = x
y // Compilation error
这会导致编译错误:
未定义值或构造函数 y 。
但是,如果我在MyType y
附近加上括号,则代码会编译。
let myFunc x =
let (MyType y) = x
y // Compiles successfully
两个版本之间有什么区别?
答案 0 :(得分:4)
第一个版本声明了一个名为MyType
的函数,其中一个参数名为y
。此参数仅在此函数的正文中可用,因此当您尝试在函数外部访问此参数时会出现错误。
第二个版本使用名为MyType
的构造函数构造一个值,将其内容绑定到标识符y
。然后,此标识符可用,直到当前范围结束。
必要时用括号区分解构和函数声明。
在这种特殊情况下,您可以通过将其移入参数列表来简化解构:
let myFunc (MyType y) =
y