gpt4 book ai didi

f# - 为什么在使用绑定(bind)到 `let` 的联合类型成员时需要括号?

转载 作者:行者123 更新时间:2023-12-02 03:42:10 25 4
gpt4 key购买 nike

具有以下类型:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com