由于我有大量的IDisposable
s 需要处理一段时间,因此我设置了一个一次性物品列表和一个传递函数,以将项目添加到其中作为副作用:
let mutable disposables = []
let (~-) (x:'a) = disposables <- x :: disposables; x
这样我就有希望做到这一点:
let thing1 = -new Form()
let thing2 = -new Control()
for i in disposables do i.Dispose()
问题是 F# 自动限制'a
为IDisposable
,并带有警告消息:
这种构造导致代码不像类型注释所指示的那样通用。类型变量“a”已被限制为“IDisposable”类型。
那么返回类型operator ~-
就变成了IDisposable,破坏了函数的便利性。
有没有办法阻止 F# 创建这个约束?