gpt4 book ai didi

f# - 什么时候应该使用let、member val 和member this?

转载 作者:行者123 更新时间:2023-12-03 07:37:26 25 4
gpt4 key购买 nike

F# 有许多不同的方法来定义类型中的变量/成员。在 F# 中什么时候应该使用 letmember valmember this.,它们之间有什么区别?静态和可变成员怎么样?

最佳答案

@meziantou 的答案已经很好地概述了这些选项(以及它们的不同行为方式),所以让我给出一个简短的总结或建议列表:

  • 使用letlet mutable如果您想定义一个仅在类型内可见的局部值(本质上是 private 字段或 private 函数)。在顶层模块内,这些可以公开访问并评估一次。 let mutable在模块级别创建一个没有支持值的可写字段。

  • 您可以使用val要创建自动属性,它是 member val Foo = .. with get 的缩写。在 F# 中,这被视为一个字段,但它在内部实现为带有支持字段的 get-property,以防止突变。

  • 您可以使用val mutable定义一个公共(public)字段,但我不建议这样做,除非您确实需要一个公共(public)字段(例如,某些 .NET 库可能需要具有此结构的类型)。

  • 使用 member x.Foo = ...是从类型公开(只读)状态的最佳方式。大多数 F# 类型都是不可变的,因此这可能是最常见的公共(public)成员。它是仅获取实例属性的缩写。

  • 使用 member x.Foo with get() = .. and set(value) ...当您需要在 gettor 和 settor 中使用您自己的自定义代码创建 get/set 属性时非常有用。当您创建可变对象时,这有时很有用。

  • 使用 member val Foo = ... with get, set与 C# 中自动实现的属性基本相同。如果您需要一个带有仅读取/写入可变支持字段的 getter 和 setter 的可变属性,这非常有用。

  • 使用 static let在类型上创建一个静态(类级)只读字段,该字段在内部创建一个带有支持字段的属性。使用static mutable let ...用于没有支持字段的读/写静态字段。

  • 使用 static val mutable private创建带有支持字段的静态读/写自动属性,它不能是公共(public)的。

关于f# - 什么时候应该使用let、member val 和member this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840948/

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