F#根据成员函数生成成员值

F# make member value based on member function

我在class中创建了一个成员函数。之后我想创建一个成员值,该成员值设置为该成员函数的结果。

type MyType() = 
  member this.drawFilledPlanet(xCoord:int, yCoord:int, pWidth:int, pHeight:int, color) =
    let brush = new System.Drawing.SolidBrush(color)
    this.window.Paint.Add(fun e -> 
      e.Graphics.FillEllipse(brush, xCoord, yCoord, pWidth, pHeight))

  member val theSun = drawFilledPlanet(350,350,100,100, this.yellow)

我收到 drawFilledPlanet 未定义的错误。

谁能告诉我发生了什么事?

因为 drawFilledPlanet 是一个成员函数,它需要一个 class 实例来调用它。如果您从另一个成员函数调用它,您将使用该成员的定义来命名当前实例:

member this.f() = this.drawFilledPlanet ...

但是,在您的情况下,由于您要定义 member val,因此您没有这样的机会。在这种情况下,您可以在 class 声明的最顶部命名当前实例:

type MyType() as this =
    ...
    member val theSun = this.drawFilledPlanet ... 

我想指出的一件事是,这个定义可能不会达到您期望的效果。如果你这样定义 theSundrawFilledPlanet 方法只会在 class 初始化时执行一次,而不是每次访问 theSun 时。你是故意的吗?如果不是,那么您需要更改定义。如果是,那你为什么需要这个定义?