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

'drawFilledPlanet' 앞에'this.'가 없습니다. –

+0

아니, 아니야 – Nulle

+0

네, 그렇습니다 ..... –

답변

3

drawFilledPlanet은 멤버 함수이므로 호출 할 클래스 인스턴스가 필요합니다. 당신이 member val를 정의하고 있기 때문에, 당신은 것을이 없습니다, 그러나, 귀하의 경우에는

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

: 다른 멤버 함수에서 호출하는 경우 현재 인스턴스의 이름을 해당 멤버의 정의를 사용합니다 기회. 이 상황에서, 당신은 클래스 선언의 맨 위에 현재 인스턴스의 이름을 지정할 수 있습니다 : 내가 지적하고 싶은

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

것은이 정의가 예상 효과가 없을 수 있다는 것입니다. 이 방법으로 theSun을 정의하면 theSun에 액세스 할 때마다 drawFilledPlanet 메서드가 클래스 초기화시 한 번만 실행됩니다. 너 그걸 의도 했니? 아니면 정의를 변경해야합니다. 그렇다면 왜이 정의가 필요한 것입니까?

관련 문제