我是Smalltalk的新手,目前正在接受一个类的初始化。其中一个我们被分配的问题,需要创建一个新的类“HeavyMatrix”,被称为是这样 -创建一个矩阵类,可以在未声明矩阵大小的情况下进行初始化
aMatrix := HeavyMatrix new.
注意,没有初始大小分配。创建时大小应该是不确定的。然后,类增加值以下方法矩阵 -
aMatrix setRow:1 column:2 value:7.
所有的矩阵还没有被宣布以这种方式默认为0值新的类HeavyMatrix不应该继承以外的任何比对象(即不是矩阵或阵列)。任何Smalltalkers能帮助我吗?还有其他一些类必须包含的方法,但我认为一旦我能够初始化类,我就可以确定其他所有方法。谢谢!
究竟是什么*不*确定的大小?会有一个时间点的大小是固定的,然后消息'setRow:column:value:'变得非法? – quamrana 2013-04-06 15:40:15
您的类的实例可能有一个Matrix类的实例var,最初设置为nil。然后当你的实例收到一条setRow:column:value的消息时,它会计算它需要的Matrix的大小,实例化它,然后设置它的值。随后调用setRow:column:value:可能需要您创建一个新的Matrix,复制旧Matrix的值,然后存储新值。代码效率不高,但应该满足要求。 – 2013-04-06 16:21:28
不,不应该有一次,当setRow:column:value:成为非法的时候。我想在setRow方法调用中创建矩阵,然后将这些值复制到一个新矩阵中。如果该方法被调用并宣布为“非法”。确实不是很有效率......我想也许使用一个可扩展的集合,如OrderedCollection?无论我使用什么东西,如果这件东西具有必要的固定大小来声明,似乎非常不方便。 – 2013-04-06 16:30:32