泛型方法這個問題是基於功能隨機生成在這個過程中的一個周:https://www.coursera.org/course/reactiveFSharp調用基類
該課程是基於Scala中,我試圖複製它在FSharp。
這裏是我的問題:
我有一個抽象發電機
[<AbstractClass>]
type Generator<'a>() =
abstract member Generate: 'a
而且我有一個實現生成隨機整數
type IntGenerator() =
inherit Generator<Int32>()
let rand = new System.Random()
override this.Generate = rand.Next(Int32.MinValue, Int32.MaxValue)
現在,我想添加地圖方法到我的基類,以便使用這樣的代碼可以創建新類型的生成器
let integers = new IntGenerator()
let booleans = integers.Map (fun x -> x > 0)
所以,在這裏就是我修改了基礎類
[<AbstractClass>]
type Generator<'a>() =
abstract member Generate: 'a
member this.Map (f:'a -> 'b) = { new Generator<'b>() with member this.Generate = f base.Generate }
不幸的是,以base.Generate這一呼籲似乎是約束型「B相同的爲」一個
我不得到原因。我確信我正在簡單地做一些事情。
嗨@MaxMalook ...在這種情況下會更復雜 - 因爲'base'不是你想象的那樣) – Carsten
@CarstenKönig,你說得對,它是對象表達式中的'base'類型。 –