我有一个带有“Root”字段的基类。我正在尝试使用do binding
base.Root <- somevar
我收到以下错误
错误FS0419:'base'值只能用于直接调用被覆盖成员的基本实现
我错过了什么?它是基类
中的属性而不是属性答案 0 :(得分:1)
显然,F#编译器不允许在派生类构造函数中通过base.
引用来改变基类的字段;并且错误消息会提示您有效的base.
关键字用法。
尽管如此,你可以尝试一个讨厌的黑客,例如 upcasting 构造的派生实例,如下面的代码片段所示:
type FormulaGrammar() as self =
inherit Grammar()
do
... stuff from your gist here......
(self :> Grammar).Root <- expr
虽然在简要介绍一下你的C#原型irony.aspx
后,我会说构造函数的类似部分不使用基础Grammar
,而是使用派生类型ExpressionGrammar
来设置{{1} }}字段,在您的代码上简单地转换为Root
。