如何在我创建的Matrix类中保存x和y?

时间:2013-09-25 09:03:53

标签: matrix smalltalk visualworks

我定义了两个对象X和Y都具有与矩阵相同的大小数组

    x:= Matrix new.
    x
      rows: 2 columns: 2;
      row: 1 column: 1 put: 2;
      row: 2 column: 1 put: 2;
      row: 1 column: 2 put: 2;
      row: 2 column: 2 put: 2.
    #(2 2 2 2)  "The x returns an array"
    y := Matrix new
    y
     rows: 2 columns: 2;
     row: 1 column: 1 put: 2;
     row: 2 column: 1 put: 2;
      row: 1 column: 2 put: 2;
     row: 2 column: 2 put: 2.
    #(2 2 2 2) "The object y returns an array"

备注:

  • rows:columns是一个给出矩阵行和列的方法
  • row:column是将值放入矩阵的方法。

1 个答案:

答案 0 :(得分:0)

所以,你创建了一个类Matrix。它与Array类似,但专门用于类似矩阵的消息(您使用的消息)。现在,您创建了Matrix的两个实例x和y,并使用您定义的消息放置它们的条目。到目前为止,一切都很好。

现在你想要“保存”这些实例,可能是为了与它们一起运行其他消息,例如求和,乘法,换位,标量乘积等等。你的问题是“如何保存x和y?”答案是:不在Matrix类中!

一个好主意是创建一个TestCase的子类,即MatrixTest,并添加测试方法,如testSum,testMultiplication,testScalarMultiplication,testTransposition等。将创建x和y的代码移动到这些方法,并将这些Matrix实例保存在方法的临时值中。有点像:

MatrixText >> testSum
| x y z |
x := Matrix new rows: 2 columns: 2.
x row: 1 column: 1 put: 2.
x row: 1 column: 2 put: 2.
"<etc>"
y := Matrix new rows: 2 columns: 2.
y row: 1 column: 1 put: 2.
"<etc>"
z = x + y (you need to define the method + in Matrix!).
self assert: (z row: 1 column: 1) = 4.
"<etc>"

一般来说,您不会在Matrix中保存Matrix的实例,而是在其他使用矩阵的类中保存。