我正在scala做一个项目,我正在努力解决某个问题。我正在制作一个矩阵DSL,所以我正在重载一些运算符,如+, - 或*,以便我能做到:
matrixMult = matrix1*matrix2
我做了这个类,其中矩阵表示为Array [Array [Double]]类型,但我想使它通用:Array [Array [T]]
事情是我不知道如何在类方法中处理这个问题,因为对于像+, - 和*这样的操作。它应该适用于双打或整数,但字符串应该抛出错误。这是我目前的代码:
def +(other : Matrix[Double]): Matrix[Double] = {
var array = new Array[Array[Double]](rows)
for (i <- 0 to (rows - 1)) {
var arrayRow = new Array[Double](columns)
for (j <- 0 to (columns - 1)) {
arrayRow(j) = this.array(i)(j) + other.array(i)(j)
}
array(i) = arrayRow
}
return new Matrix(array)
}
我在arrayRow(j)= ...行上出错是正常的,因为它不知道&#34;这个&#34;对象是。 我应该怎么做才能使这项工作?就像我希望这个方法只能访问双精度(或整数)而不是字符串,如果要在Matrix [String]对象上调用此方法,它应该抛出一个错误。我尝试使用isInstanceOf()进行模式匹配,但是没有删除错误,我无法编译。
如果我班上的所有方法都有同样的问题,那么如果可能的话,我想要一个通用的答案。
感谢任何帮助, 非常感谢你!
答案 0 :(得分:1)
不确定您使用的是哪个版本的Scala,但是如果您使用的是2.8,我在Scala-lang上找到了这个帖子,看起来您可能可以使用T:Numerics将其限制为Int,Long ,浮动,双。
在线程中稍微向下,将它限制为JUST的一部分(如Int,Double),他们说要定义自己的通用Trait。 https://www.scala-lang.org/old/node/4787
答案 1 :(得分:0)
答案可以在评论中找到:
之前已经询问并回答了Matrix添加。即使问题具有不同的矩阵实现,我相信来自可靠的Rex Kerr的答案仍然适用。 - jwvh