【发布时间】:2009-09-23 05:27:00
【问题描述】:
在 C# 中,我可以在一个类上实现一个通用接口两次,使用两个不同的类型参数:
interface IFoo<T> { void Foo(T x); }
class Bar : IFoo<int>, IFoo<float>
{
public void Foo(int x) { }
public void Foo(float y) { }
}
我想在 F# 中做同样的事情:
type IFoo<'a> = abstract member Foo : 'a -> unit
type Bar() =
interface IFoo<int> with
[<OverloadID("int")>]
member this.Foo x = ()
interface IFoo<float> with
[<OverloadID("float")>]
member this.Foo x = ()
但它给出了编译器错误:
此类型在不同的泛型实例化
'IFoo<float>'和'IFoo<int>'处实现或继承相同的接口。此版本的 F# 中不允许这样做。
我在网上找不到任何discussion of this issue。出于某种原因,这种用途是否令人不悦?是否有计划在即将发布的 F# 中允许这样做?
【问题讨论】: