如何在F#中声明循环相关的抽象类

Lyn*_*ite 5 .net f# abstract-class circular-dependency circular-reference

考虑两个抽象类alpha和beta:

[<AbstractClass>]  
type alpha () =
    abstract member foo: beta->beta

[<AbstractClass>] 
and beta () = //***
    abstract member bar: alpha
Run Code Online (Sandbox Code Playgroud)

如果我尝试编译,我得到一个错误,在***指示的行上:

error FS0010: Unexpected keyword 'and' in interaction
Run Code Online (Sandbox Code Playgroud)

如果我写:

[<AbstractClass>]  
type alpha () =
    abstract member foo: beta->beta

and beta () =
    abstract member bar: alpha
Run Code Online (Sandbox Code Playgroud)

然后我得到:

error FS0365: No implementation was given for 'abstract member beta.bar : alpha'
Run Code Online (Sandbox Code Playgroud)

以及我应该添加AbstractClass属性的提示

那么我如何声明循环定义的抽象类?

Bri*_*ian 7

将属性放在'and'关键字后面:

[<AbstractClass>]
type alpha () =
    abstract member foo : beta -> beta

and [<AbstractClass>]  beta () =
    abstract member bar : alpha
Run Code Online (Sandbox Code Playgroud)