Scala Fehler: gefunden Liste [Char], erforderlich Liste [ScalaObject]
-
26-09-2019 - |
Frage
Ich habe diesen Schnipsel von 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, ", ")
Die nächste zu letzter Zeile compiliert in Ordnung, aber in der letzten Zeile erhalte ich die Fehler
Gefunden
List[Char]
, erforderlichList[ScalaObject]
(labeling
hat den Typ Map[State, Set[Char]]
.)
Ich bin ein wenig überrascht, da 1) Ich dachte, dass List[Char]
als Subtyp von List[ScalaObject]
zu sehen ist (im Gegensatz zu Java im Gegensatz), und 2) die Zeile oberhalb der letzte Zeile kompiliert! (trans
hat Typ Map[State, Set[State]]
obwohl ...)
Die Frage liegt auf der Hand, was ich tue, falsch, und wie kann ich das Problem beheben?
Lösung
Char
ist kein Subtyp von ScalaObject
.
An der Spitze haben Sie Any
die einen Supertyp von allem. Sie können sich wahrscheinlich ScalaObject
mit Any
ersetzen und das sollte Kompilieren des Codes machen.
Siehe http://www.scala-lang.org/node/128 für einen Typ Hierarchiediagramm.
In der REPL Sie die implizit Funktion zu beheben Typ Beziehungen verwenden können:
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]]
Edit: durch die Art und Weise, wissen Sie über mkString
trans(s).mkString("[", ", ", "]")