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

时间:2017-01-17 12:39:07

标签: f# member-functions member-variables

我在课堂上创建了一个成员函数。之后我想创建一个设置为该成员函数结果的成员值。

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未定义的错误。

有人可以告诉我发生了什么事吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

我想指出的一点是,这个定义可能没有你期望的效果。如果以这种方式定义theSundrawFilledPlanet方法只会在类初始化时执行一次,而不是每次都访问theSun。你有意吗?如果不是,那么您需要更改定义。如果是,那么为什么你需要这个定义呢?