链接索引Scala编译器错误的解决方法?

链接索引Scala编译器错误的解决方法?,scala,scala-breeze,nd4j,Scala,Scala Breeze,Nd4j,ND4S和Breeze中的链接索引会产生Scala编译器错误: var m = Nd4j.create(2, 3) var a = m(0, ->) var b = a(0) var c = m(0, ->)(0) 前两项工作,但第三项产生: 没有足够的参数用于方法apply:(RichINDArray类中的隐式ev:org.nd4s.NDArrayEvidence[org.nd4j.linalg.api.ndarray.INDArray,B],隐式ev2:scala.reflec

ND4S和Breeze中的链接索引会产生Scala编译器错误:

var m = Nd4j.create(2, 3)
var a = m(0, ->)
var b = a(0)
var c = m(0, ->)(0)
前两项工作,但第三项产生:

没有足够的参数用于方法apply:(RichINDArray类中的隐式ev:org.nd4s.NDArrayEvidence[org.nd4j.linalg.api.ndarray.INDArray,B],隐式ev2:scala.reflect.Manifest[B])org.nd4j.linalg.api.ndarray.INDArray

我尝试使用
(0,0)
而不是
(0)
,因为它仍然是二维的,但这并不重要。还有许多附加括号的变体

这是Scala解析器认为它是其他构造还是ND4S中的错误?是否有一些变通语法可以使链接工作

编辑:

微风中:

var m = DenseMatrix.zeros[Int](5,5)
var a = m(0, ::)
var b = a(0)
var c = m(0, ::)(0)
a和b工作,但c产生此编译器错误:

var m = Nd4j.create(2, 3)
var a = m(0, ->)
var b = a(0)
var c = m(0, ->)(0)
类型失配;找到:Int(0)必需:breeze.linalg.support.CanSlice2[breeze.linalg.DenseMatrix[Int],Int,collection.immutable.::.type,?]

也许这是解析为curry函数调用,或者宏以一种在这里不起作用的方式展开。虽然我猜一个人永远不需要链接索引,因为
m(0,0)
可以在上面工作,并且任何索引都可以折叠,但是对于在这些情况下欺骗Scala的一般情况,有什么解决方案吗

此外,链接也适用于多维数组:

var n = Array.ofDim[Double](2, 3)
var x = n(0)(0)
这两种方法
m(0,->)
m(0,::)
都使用第二个隐式参数列表。因此,Scala将调用链接解释为试图显式提供此隐式参数列表。这就是它报告参数编号不匹配和参数类型不匹配的原因

尝试使用
(m(0,->)(0)
m(0,->)。应用(0)
(或类似程序)。这迫使Scala隐式地提供隐式参数列表,然后您的第二个调用就变成了您想要的普通函数调用