Обходной путь для связанной индексации Ошибка компилятора Scala?

Цепная индексация в ND4S и Breeze приводит к ошибке компилятора Scala:

var m = Nd4j.create(2, 3)
var a = m(0, ->)
var b = a(0)
var c = m(0, ->)(0)

Первые две работы, но третий производит:

применяется недостаточно аргументов для метода: (неявный ev: org.nd4s.NDArrayEvidence[org.nd4j.linalg.api.ndarray.INDArray,B], неявный ev2: scala.reflect.Manifest[B])org.nd4j.linalg.api.ndarray.INDArray в классе RichINDArray.

Я пробовал с (0, 0) вместо (0) так как это все еще 2d, но это не имело значения. И много вариантов лишних скобок.

Парсер 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 выдает эту ошибку компилятора:

несоответствие типов; найдено: Int(0) обязательно: breeze.linalg.support.CanSlice2[breeze.linalg.DenseMatrix[Int],Int,collection.immutable.::.type,?]

Может быть, это синтаксический анализ при вызове функции карри, или макрос расширяется таким образом, что здесь не работает. И хотя я думаю, что человеку никогда не нужно цеплять индексацию, так как m(0, 0) работает выше, и любая индексация может быть свернута, есть ли какое-то решение для общего случая обмана Scala в этих ситуациях?

Также цепочки работают с многомерными массивами:

var n = Array.ofDim[Double](2, 3)
var x = n(0)(0)

1 ответ

Решение

Оба метода m(0, ->) а также m(0, ::) возьмите второй список неявных параметров. Таким образом, цепочка вызовов интерпретируется Scala как попытка явно предоставить этот список неявных параметров. Вот почему он сообщает о несоответствии номера аргумента и несоответствии типа аргумента.

Попробуйте использовать (m(0, ->))(0) или же m(0, ->).apply(0) (или аналог Бриза). Это заставляет Scala неявно предоставлять список неявных параметров, и ваш второй вызов становится обычным вызовом функции, как вы и предполагали.

Другие вопросы по тегам