Inheritance 如何从fsharp签名文件中的抽象类继承?
我正在尝试在FSharp中建模一个域。我希望客户端代码能够体验对这些类型的干净访问。部分是通过创建签名文件(.fsi),如下所述: Microsoft页面没有描述继承如何在FSharp签名文件中工作。我在这里发现了如何使用“interface”关键字指示接口实现: 很好。但我想更进一步,从抽象类继承,并在签名文件中指出 目标是多态性。在某个地方,我想要一个函数将参数“v”作为:(v:S list),其中S是一个超类型,列表可能包含其子类型的值 但是,从抽象类继承的fsharp签名文件的语法是什么 在“artifact.fs”中,我有(是的,这是一个Websharper项目):Inheritance 如何从fsharp签名文件中的抽象类继承?,inheritance,syntax,f#,abstract-class,signature-files,Inheritance,Syntax,F#,Abstract Class,Signature Files,我正在尝试在FSharp中建模一个域。我希望客户端代码能够体验对这些类型的干净访问。部分是通过创建签名文件(.fsi),如下所述: Microsoft页面没有描述继承如何在FSharp签名文件中工作。我在这里发现了如何使用“interface”关键字指示接口实现: 很好。但我想更进一步,从抽象类继承,并在签名文件中指出 目标是多态性。在某个地方,我想要一个函数将参数“v”作为:(v:S list),其中S是一个超类型,列表可能包含其子类型的值 但是,从抽象类继承的fsharp签名文件的语法是什么
[]
类型人工制品()=
抽象成员:带get的文档
在“Visual.fsi”中,我有:
[]
类型视觉=
继承文物
“继承”行不编译。那么正确的语法是什么呢
我试过这些(也不起作用):
1) 人工制品后括号
[<JavaScript; Sealed>]
type Visual =
inherit Artefact()
[]
类型视觉=
继承文物()
2) 目视检查后的括号
[<JavaScript; Sealed>]
type Visual() =
inherit Artefact
[]
键入Visual()
继承文物
有什么想法吗?这是从签名文件中的抽象类继承的正确语法:
[<JavaScript; Sealed>]
type Visual =
class
inherit Artefact
end
[]
类型视觉=
班
继承文物
结束
解释(在我看来)。在我在上面的问题中使用的语法中,编译器不理解类型是类。并非所有类型都可以继承,因此编译器对此表示不满
在这个答案中使用的语法中,我显式地声明类型是一个类。我不知道这个语法,我只看到了“class end”,我从没想过你可以在这两个关键字之间添加东西
感谢上面的回复。如果不知道语法,则自动生成.fsi文件。这将为您提供语法,您可以对其进行自定义和清理。有关自动生成签名文件的信息,请参阅本文:
解决这类问题的最简单方法是编写一个实现文件,让编译器生成fsi文件。谢谢John,这很有帮助。我已经发布了答案。
[<JavaScript; Sealed>]
type Visual() =
inherit Artefact
[<JavaScript; Sealed>]
type Visual =
class
inherit Artefact
end