2017-03-09 54 views
1

我的問題是非常相似,這Declaring an array inside a class, and setting its size with the constructor創建內部類數組大小的構造確定

但我將球拍工作。 正是我想要實現一個代表對象多邊形的類(任意數量的邊)。多邊形完全由順時針順序的邊數和頂點數組來確定。所以我的課程必須包含這些屬性。 有什麼方法可以在球拍中實現這一點。 我不是球拍專家(我在球拍中只做過功能編程,但是我想在課程項目中使用內置的類和向量)。也有任何其他的方式來抽象地表示多邊形

+0

(https://docs.racket-lang.org /reference/mzlib_class.html?q=class)?例如。你是否需要polymorfism?如果不是,那麼簡單的['struct'](https://docs.racket-lang.org/reference/define-struct.html)就足夠了嗎? – Sylwester

+0

是的,需要繼承以及私人會員功能。 – Naman

回答

0

首先,我應該說我同意@Slywester,你很多時候並不想在Racket中使用類。

但是,有時你會這樣做,這就是爲什麼他們提供。

您正在尋找的關鍵字是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`]

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