小编Enr*_*dre的帖子

延迟接口方法的实现?

我已经在F#编程了好几年了,有一个"问题"困扰了我一段时间,我一直无法解决.这不是一个错误,我认为这是一个设计决定,但无论如何,问题是:有没有办法延迟(可能这不是正确的话)接口的实现?,即没有实现它们在初始定义中,但稍后,也许在我为该类型实现模块后的同一文件中.我将用一个简单的例子来解释:假设我有以下数据结构:

    type 'T MyCollection =
        (*type definition*)
        interface IEnumerable<'T> with
            member this.GetEnumerator () =
                (* I don't want to implement it here 
                   because I still don't have the module
                   with a toSeq function *)
Run Code Online (Sandbox Code Playgroud)

如果我在那里实现了方法,我还必须将所有函数实现为类型的方法,然后模块将只是调用方法的"代理".这样我就可以创建一个OO优先数据结构,然后创建一个模块(重载了类型注释),以便实现功能优先使用.我更愿意编写一个功能优先的数据结构(更清晰,因为类型推断可以更好地工作),然后创建一个OO包装器,以便为C#等语言提供更好的智能感知支持.这种方法符合F#的设计指南告诉我们的内容,但接口不能在任何地方实现,只能在类型的初始定义中实现.这种限制迫使我用成员编写整个数据结构.我一直在寻找示例,我发现FSharp.Core列表中的列表实现正是我想要的,但我不能这样做,编译器不会让我.我几乎可以肯定这是一个设计决定,也许是为了避免鼓励不良做法,我不知道,但我不认为我希望成为一个糟糕的做法.我也很清楚fsharp编译器的线性特性.

如果你们中的任何一个人知道如何做我想做的事,如果你告诉我,我会很高兴的.此外,如果你们中的任何人知道为什么我不应该遵循这种方法,我也会很高兴知道.必须有一个原因,为什么这对其他人来说不是问题.

提前致谢.

f#

10
推荐指数
1
解决办法
183
查看次数

标签 统计

f# ×1