在类中创建数组,其大小由构造函数确定

时间:2017-03-09 21:27:46

标签: class object racket

我的问题与此Declaring an array inside a class, and setting its size with the constructor

非常相似

但我打算用球拍工作。 所以我想要实现一个表示对象多边形(任意数量的边)的类。多边形由顺时针顺序的边数和顶点数确定。所以我的班级必须包含这些属性。 有没有办法在球拍中实现这一点。 我不是球拍方面的专家(我在球拍中只进行过功能编程,但我想在课程项目中使用内置的类和向量)。还有以抽象方式表示多边形的任何其他方式

1 个答案:

答案 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)