F# делает значение члена на основе функции-члена

Я сделал функцию-член в классе. После этого я хочу сделать значение члена, которое установлено в результате этой функции-члена.

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 не определено.

Может кто-нибудь сказать мне, что случилось?


person Nulle    schedule 17.01.2017    source источник
comment
Отсутствует this. перед drawFilledPlanet.   -  person Fyodor Soikin    schedule 17.01.2017
comment
Да это так.....   -  person Fyodor Soikin    schedule 17.01.2017
comment
если я это сделаю, это приведет к ошибке, пространство имен или модуль «это» не определено.   -  person Nulle    schedule 17.01.2017


Ответы (1)


Поскольку drawFilledPlanet является функцией-членом, ей нужен экземпляр класса, для которого она будет вызываться. Если вы вызываете его из другой функции-члена, вы должны использовать определение этого члена для имени текущего экземпляра:

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

Однако в вашем случае, поскольку вы определяете member val, у вас нет такой возможности. В этой ситуации вы можете назвать текущий экземпляр в самом верху объявления класса:

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

Я хотел бы отметить одну вещь: это определение может не иметь ожидаемого эффекта. Если вы определите theSun таким образом, метод drawFilledPlanet будет выполняться только один раз при инициализации класса, а не каждый раз при доступе к theSun. Вы это намеревались? Если нет, то вам нужно изменить определение. Если да, то зачем вообще нужно это определение?

person Fyodor Soikin    schedule 17.01.2017