因为方法foo中的奇怪行为,我不能写像bar这样的方法我需要:
import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector
class Test {
val dim = 3
val X:DenseMatrix[Double] = DenseMatrix.rand(dim,dim)
val u:DenseVector[Double] = DenseVector.fill(dim){1.0}
def foo:Unit = {
val i=0;
val row_i:DenseVector[Double] = X(i,::).t // OK
val s = u(i)+u(i) // OK
val j:Integer = 0
val row_j:DenseVector[Double] = X(j,::).t // does not compile (A)
val a = u(j)+u(j) // does not compile (B)
}
def bar(i:Integer):Double = u(i)+u(i) // does not compile (C)
}
有解决方法吗?预先感谢所有答复。
编译错误:
(a)找不到参数罐的隐式值: Breeze.linalg.Support.Canslice2 [Breeze.Linalg.Densematrix [double],Integer,Collection.Mmutable。::。类型,结果] 未足够的方法的论点应用:(隐式罐头: Breeze.Linalg.Support.Canslice2 [Breeze.linalg.Densematrix [double],Integer,Collection.Mmutable。::。类型,结果])
导致性状张紧。未指定的值参数罐头。
(b),(c)
找不到参数罐的隐式值: Breeze.Linalg.Support.Canslice [Breeze.linalg.Densevector [double],整数,结果] 应用方法的论点不足:(隐式罐头:breeze.linalg.support.canslice [breeze.linalg.ensensevector [double],integer,unter])结果)结果 在特质张力中。未指定的值参数罐头。
首先:将您的Integer
转换为Int
。这至少会解决第一个汇编误差。以下更新您的代码确实编译
import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector
import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector
class Test {
val dim = 3
val X:DenseMatrix[Double] = DenseMatrix.rand(dim,dim)
val u:DenseVector[Double] = DenseVector.fill(dim){1.0}
def foo:Unit = {
val i=0;
val row_i:DenseVector[Double] = X(i,::).t // OK
val s = u(i)+u(i) // OK
val j:Int = 0
val row_j:DenseVector[Double] = X(j,::).t // does not compile (A)
val a = u(j)+u(j) // does not compile (B)
}
def bar(i:Int):Double = u(i)+u(i) // does not compile (C)
}
来自REPL:
// Exiting paste mode, now interpreting.
import breeze.linalg.DenseMatrix
import breeze.linalg.DenseVector
defined class Test
因此,您的其他错误对我也消失了(Scala 2.11.8)。让我知道您是否还有其他问题。