创建内部类数组大小的构造确定
问题描述:
我的问题是非常相似,这Declaring an array inside a class, and setting its size with the constructor创建内部类数组大小的构造确定
但我将球拍工作。 正是我想要实现一个代表对象多边形的类(任意数量的边)。多边形完全由顺时针顺序的边数和顶点数组来确定。所以我的课程必须包含这些属性。 有什么方法可以在球拍中实现这一点。 我不是球拍专家(我在球拍中只做过功能编程,但是我想在课程项目中使用内置的类和向量)。也有任何其他的方式来抽象地表示多边形
答
首先,我应该说我同意@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)
(https://docs.racket-lang.org /reference/mzlib_class.html?q=class)?例如。你是否需要polymorfism?如果不是,那么简单的['struct'](https://docs.racket-lang.org/reference/define-struct.html)就足够了吗? – Sylwester
是的,需要继承以及私人会员功能。 – Naman