tldr: назовите свой класс как-нибудь еще, попросите метод взять второй параметр, который представляет собой список, который вы хотите сократить.
Проблема в том, что вы назвали свой класс List
, который уже является именемкласс в Скале.Само по себе это на самом деле не нарушит код, но может вызвать некоторую путаницу в том, имеете ли вы в виду Scala List
или свой собственный List
.
. Затем вы перепутаете его и пытаетесь использоватьПользовательский класс, как будто это обычный Scala List
.в частности, пытаясь использовать сопоставление с шаблоном с такими вещами, как Nil
и ::
.Они работают только на Scala List
, а не на ваш.Конечно, вы могли бы также написать код для тех, кто будет работать с вашим пользовательским List
, но вам все равно нужно быть осторожным, чтобы убедиться, что вы тоже ссылаетесь, я бы порекомендовал использовать другие имена, если вы пойдете по этому пути.
Более простое решение - присвоить классу другое имя, а затем изменить право Reduce, чтобы также взять в качестве параметра обычный List
.Примерно так:
abstract class MyClass {
def reduceRight[T](list: List[T], op: (T, T) => T): Either[String, T] = list match {