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