一千萬個為什麽

搜索

具有F#類的tupled參數的默認方法

為什麽這個F#類不能編譯(使用VS2010):

type Base =
    abstract func : (int * int) -> int

    default this.func (x : int, y : int) : int =
        x + y

func的默認實現導致此編譯錯誤:

Error   9   This override takes a different number of arguments to the corresponding abstract member

如果我改變它是一個成員:

type Base =
    abstract func : (int * int) -> int

    member this.func (x : int, y : int) : int =
        x + y

然後它編譯(雖然我相信現在抽象函數缺少一個實現),第二個函數的類型匹配第一個。

在相關的說明中,為什麽編譯器不要求Base的第二個定義具有AbstractClass屬性?

最佳答案

只是擺脫括號:

type Base =
    abstract func : int * int -> int

    default this.func (x : int, y : int) : int =
        x + y

你甚至可以縮短它:

default this.func(x, y) = x + y

轉載註明原文: 具有F#類的tupled參數的默認方法