具有以下类型:
type MyType =
| MyType of string
Run Code Online (Sandbox Code Playgroud)
我尝试这样做:
let myFunc x =
let MyType y = x
y // Compilation error
Run Code Online (Sandbox Code Playgroud)
这会导致编译错误:
值或构造函数y未定义。
但是,如果我在 周围加上括号MyType y,代码就会编译。
let myFunc x =
let (MyType y) = x
y // Compiles successfully
Run Code Online (Sandbox Code Playgroud)
这两个版本有什么区别?
第一个版本声明一个MyType带有一个名为 的参数的函数y。此参数仅在此函数体中可用,因此当您尝试在函数外部访问此参数时,您会收到错误。
第二个版本使用名为 的构造函数解构一个值MyType,将其内容绑定到标识符y。然后,该标识符一直可用,直到当前作用域结束。
括号是区分解构和函数声明所必需的。
在这种特殊情况下,您可以通过将其移至参数列表来简化解构:
let myFunc (MyType y) =
y
Run Code Online (Sandbox Code Playgroud)