2017-01-17 2 views
2

Я создал функцию-член в классе. Впоследствии я хочу, чтобы значение члена было установлено на результат этой функции-члена.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 не определен.

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

+0

Отсутствует 'this.' перед' drawFilledPlanet'. –

+0

nope это не он – Nulle

+0

Да, это ..... –

ответ

3

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

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

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

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

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