2017-03-09 2 views
1

내 질문이 Declaring an array inside a class, and setting its size with the constructor만드는 배열은

매우 유사 생성자에 의해 결정하지만 난 라켓에서 일하기 위하여려고하고있다. 그래서 정확하게 개체 다각형을 나타내는 클래스를 구현하고 싶습니다. 다각형은 변의 수와 정점의 배열이 시계 방향으로 정확하게 결정됩니다. 따라서 내 수업에는 이러한 속성이 포함되어야합니다. 이것을 라켓으로 구현할 수있는 방법이 있습니까? 나는 라켓의 전문가는 아니지만 (라켓에서는 아직 기능 프로그래밍 만했으나 내 코스 프로젝트에 내장 된 클래스와 벡터를 사용하고 싶다). 또한 추상적 인 방식으로 폴리곤을 표현하는 다른 방법이 있습니다

+0

을 /reference/mzlib_class.html?q=class)? 예 : 당신은 다민족을 필요로합니까? 그렇지 않다면 간단한 ['struct'] (https://docs.racket-lang.org/reference/define-struct.html)로 충분하지 않습니까? – Sylwester

+0

예, 전용 멤버 함수뿐만 아니라 상속이 필요합니다. – Naman

답변

0

먼저 @Slywester에 동의해야한다고 말하면서 라켓에서 실제로 클래스를 사용하고 싶지는 않습니다.

하지만 때로는 제공되므로 제공됩니다.

찾으려는 키워드는 init-field이며, 이는 클래스 내부 및 외부 모두에 액세스 할 수있는 라켓 클래스의 공개 필드를 선언합니다. (당신이하지 않으려면 그냥 init를 사용하여 더 나을 당신이있어 공공 분야가 될,하지만 그 조금 더 열심히 방법의 변수를 사용 할 수 있습니다.) init-field로 초기화

(define polygon% 
    (class object% 
    (super-new) 
    (init-field size) 
    (define vec (make-vector size)) 
    (define/public (get-vector) 
     vec))) 

필드도 가능 이 예제에서는 주어진 필드의 길이를 가진 vec이라는 배열을 만듭니다. 여기에서

, 당신은 new로 클래스를 인스턴스화 할 수 있으며, send get-vector와 배열 얻을 : 당신이 [`class`]이 필요합니까 왜 (https://docs.racket-lang.org을

> (define p (new polygon% [size 10])) 
> (send p get-vector) 
'#(0 0 0 0 0 0 0 0 0 0)