Ошибка Scala: Найдено список [CHAR], требуемый список [ScalaObject

StackOverflow https://stackoverflow.com/questions/4233342

  •  26-09-2019
  •  | 
  •  

Вопрос

У меня есть этот фрагмент Scala Code:

def prologList(l: List[ScalaObject], sep: String) =
    "[" + (if (l isEmpty) "" else l.reduceLeft(_ + sep + _)) + "]"

def neighbors(s: State) = prologList(trans(s).toList, ", ")
def labels(s: State) = prologList(labeling(s).toList, ", ")

Следующая к последней строке компилируется нормально, но на последней строке я получаю ошибку

Найденный List[Char], обязательный List[ScalaObject]

(labeling имеет тип Map[State, Set[Char]].)

Я немного удивлен, с 1) я думал, что List[Char] можно было увидеть как подтип List[ScalaObject] (в отличие от Java), а 2) линия над последней строкой компилирует! (trans имеет тип Map[State, Set[State]] хотя...)

Вопрос очевиден, что я делаю не так, и как я это исправить?

Это было полезно?

Решение

Char не подтип ScalaObject.

Наверху у вас есть Any какой супер тип всего. Вы, вероятно, можете заменить ScalaObject с Any И это должно сделать ваш код компиляцией.

Видеть http://www.scala-lang.org/node/128. Для диаграммы иерархии типа.

В REPL вы можете использовать неявно функцию для устранения неполадок в списке отношений:

scala> implicitly[Char <:< Any]
res0: <:<[Char,Any] = <function1>

scala> implicitly[Char <:< ScalaObject]
<console>:6: error: could not find implicit value for parameter e: <:<[Char,ScalaObject]
       implicitly[Char <:< ScalaObject]
                 ^

scala> implicitly[List[Char] <:< List[Any]]
res2: <:<[List[Char],List[Any]] = <function1>

scala> implicitly[List[Char] <:< List[ScalaObject]]
<console>:6: error: could not find implicit value for parameter e: <:<[List[Char],List[ScalaObject]]
       implicitly[List[Char] <:< List[ScalaObject]]

Редактировать: Кстати, вы знаете о mkString?

trans(s).mkString("[", ", ", "]")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top