阶错误:实测值列表[字符],所需列表[ScalaObject]
-
26-09-2019 - |
题
我的Scala代码此片段:
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)I认为List[Char]
可以被看作是List[ScalaObject]
的一个子类型(相对于爪哇),和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("[", ", ", "]")
不隶属于 StackOverflow