具有以下类型:
type MyType =
| MyType of string
我尝试这样做:
let myFunc x =
let MyType y = x
y // Compilation error
这会导致编译错误:
The value or constructor y is not defined.
但是,如果我在 MyType y
两边加上括号,代码就会编译。
let myFunc x =
let (MyType y) = x
y // Compiles successfully
两个版本有什么区别?
最佳答案
第一个版本声明了一个名为 MyType
的函数,并带有一个名为 y
的参数。此参数仅在此函数体中可用,因此当您尝试在函数外部访问此参数时,您会收到错误。
第二个版本使用名为 MyType
的构造函数解构一个值,将其内容绑定(bind)到标识符 y
。此标识符在当前作用域结束之前一直可用。
需要使用括号来区分解构和函数声明。
在这种特殊情况下,您可以通过将其移至参数列表来简化解构:
let myFunc (MyType y) =
y
关于f# - 为什么在使用绑定(bind)到 `let` 的联合类型成员时需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217240/