如何使Abstract类继承F#中的接口?

ozg*_*gur 1 f#

我有带有接口和抽象类的以下代码。

    type INode<'a> =
    abstract member Parent:INode<'a>
    abstract member Evaluate:unit->'a
    abstract member Clone:INode<'a> -> INode<'a>
    abstract member SelectRandom:int->INode<'a> option

[<AbstractClass>]
type TerminalNode<'a>() =
    interface INode<'a> with
        member this.SelectRandom indexOfCurrentNode = 
            let p = 1.0 / float indexOfCurrentNode
            if Random().NextDouble() < p then Some (this:>INode<'a>) else None
Run Code Online (Sandbox Code Playgroud)

我想在其中实现层次结构 节点层次结构类图 但是编译器抱怨应该实现该接口的所有方法。

创建实现一个接口并实现该接口的一个方法而使其他方法保持抽象的Abstract类的正确方法是什么?

注意:如果看不到图像,则说明您的网络阻止了imgur.com。

Cha*_*ert 5

您可以在类型上定义抽象成员,然后提供指向这些抽象成员的实现。例如:

[<AbstractClass>]
type TerminalNode<'a>() as self =
    abstract member Parent : INode<'a>
    abstract member Evaluate : unit->'a
    abstract member Clone:INode<'a> -> INode<'a>
    interface INode<'a> with
        member this.Parent = self.Parent
        member this.Evaluate () = self.Evaluate ()
        member this.Clone a = self.Clone a
        member this.SelectRandom indexOfCurrentNode = 
            ...
Run Code Online (Sandbox Code Playgroud)

(注意,as selftype线路,它可以让你通过变量名指的是抽象类self