gpt4 book ai didi

f# - F# 中的成员属性是 Let- 还是 Use- 绑定(bind)?

转载 作者:行者123 更新时间:2023-12-01 00:35:03 24 4
gpt4 key购买 nike

考虑以下示例 F# 代码:

type mytype() =
member this.v = new OtherClass()

如果 OtherClass 实现 IDisposable,则成员绑定(bind)的行为类似于 let 绑定(bind)还是 use 绑定(bind)?有没有办法让它充当使用绑定(bind)?我有一些与此非常相似的代码,我想确保在父对象超出范围时调用 Dispose。

快速浏览 Expert F# 未能找到任何明确的信息,但也许我正在寻找书中的错误术语。

最佳答案

在您的片段中,成员的正文 v每次调用成员时都会对其进行评估(意味着每次有人使用它时,它将创建一个 OtherClass 的新实例)。该成员只是返回新创建的对象,您可以像这样使用它:

let m = new MyType()
use v = m.V // 'use' binding

我不确定这是否是您要问的。如果您只想创建一个实例,则需要编写如下内容:
type MyType() =
let v = new OtherClass()
member this.V = v

这和往常一样 let绑定(bind)和 vMyType 的当前实例时,值不会被自动释放。被处置。有 v自动处理,您需要实现 IDisposableMyType明确:
type MyType() =
let v = new OtherClass()
member this.V = v
interface IDisposable with
member x.Dispose() = (v :> IDisposable).Dispose()

不幸的是,没有语法糖可以使它更好(我曾经建议允许 use 并为 F# 团队的类型成员隐式实现 IDisposable,但他们没有实现它
(然而:-)))。

关于f# - F# 中的成员属性是 Let- 还是 Use- 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512163/

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