我的问题与此Declaring an array inside a class, and setting its size with the constructor
非常相似但我打算用球拍工作。 所以我想要实现一个表示对象多边形(任意数量的边)的类。多边形由顺时针顺序的边数和顶点数确定。所以我的班级必须包含这些属性。 有没有办法在球拍中实现这一点。 我不是球拍方面的专家(我在球拍中只进行过功能编程,但我想在课程项目中使用内置的类和向量)。还有以抽象方式表示多边形的任何其他方式
答案 0 :(得分:0)
首先,我应该声明我同意@Slywester大部分时间你并不想在Racket中使用类。
但是,有时你会这样做,这就是他们被提供的原因。
您要查找的关键字是init-field
,这会在球拍类中声明 public 字段,该类可供课程内外的成员访问。 (如果你不希望它成为一个公共领域,你最好只使用init
,但是在方法中使用变量会更难。)
(define polygon%
(class object%
(super-new)
(init-field size)
(define vec (make-vector size))
(define/public (get-vector)
vec)))
使用init-field
初始化的字段也可以在类的范围内使用,此示例创建一个名为vec
的数组,该数组具有给定字段的长度。
从这里开始,您可以使用new
实例化该类,并使用send get-vector
获取数组:
> (define p (new polygon% [size 10]))
> (send p get-vector)
'#(0 0 0 0 0 0 0 0 0 0)