使用F#继承null引用异常

Old*_*vec 4 inheritance f# nullreferenceexception

有没有办法使下面的代码工作?

open System.Collections.Generic

type Geometry<'t>(child: 't) =
  let values = List()
  member o.add (v: float) = values.Add v; child

and Line() as self =
  inherit Geometry<Line>(self)
  member o.length v = o.add v

let line = Line().length(50.0)
Run Code Online (Sandbox Code Playgroud)

我明白了

System.NullReferenceException:未将对象引用设置为对象的实例.

编辑:

调用以下内容就足以触发异常.

let line = Line()
Run Code Online (Sandbox Code Playgroud)

动机是你可以做到:

let line = Line().x1(10).y1(20).x2(30).y2(10).color("blue") // ...
Run Code Online (Sandbox Code Playgroud)

你可以在所有几何中重复使用普通成员(圆形,椭圆形......)

小智 5

open System.Collections.Generic

type Geometry<'t when 't :> Geometry<'t>>() =
  let values = List()
  member o.add (v: float) = values.Add v; o :?> 't

and Line() =
  inherit Geometry<Line>()
  member o.length v = o.add v

let line = Line().length(50.0)
Run Code Online (Sandbox Code Playgroud)