Abe*_*bel 8

override valF# 中有一种东西,它确实融入了语言中。第 155 页的示例编译如下:

type MyBase () =
    abstract Property : string with get, set
    default val Property = "default" with get, set
type MyDerived() =
    inherit MyBase()
    override val Property = "derived" with get, set
Run Code Online (Sandbox Code Playgroud)

在 FSI 中输入以下内容表明覆盖的内容val已正确访问并返回:

> type MyBase =
  new: unit -> MyBase
  abstract Property: string
  override Property: string
type MyDerived =
  inherit MyBase
  new: unit -> MyDerived
  override Property: string

> MyDerived().Property;;
val it: string = "derived"
Run Code Online (Sandbox Code Playgroud)

不过我同意,文档也应该提到它。充其量你可以说它是隐含的,其中(在“接口”下)它说你可以使用valor 成员与overrideor default。这当然应该改进。

  • @Eugene F#(或任何 FP)中更常见的方法是不使用 OO 属性来包含函数,而是将它们作为参数传递给需要访问此类函数的(纯)函数。我不知道你的用例,但我知道这样做的情况很少见。或者,如果确实需要,您可以考虑使用委托作为属性的类型。 (2认同)