5

prendere in considerazione le due classi astratte alfa e beta:Come dichiaro circolari classi astratte dipendenti in F #

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

[<AbstractClass>] 
and beta() = //*** 
    abstract member bar: alpha 

Se provo a compilare che ottengo un errore, sulla linea indicata con * * *:

error FS0010: Unexpected keyword 'and' in interaction 

E se scrivo:

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

and beta() = 
    abstract member bar: alpha 

tanto sono:

error FS0365: No implementation was given for 'abstract member beta.bar : alpha' 

e il suggerimento che avrei dovuto aggiungere l'attributo AbstractClass

Così le classi astratte Come dichiaro circolarmente definiti?

risposta

7

Mettere l'attributo dopo la 'e' parola chiave:

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

and [<AbstractClass>] beta() = 
    abstract member bar : alpha