代码之家  ›  专栏  ›  技术社区  ›  aioobe

scala错误:找到列表[char],必需列表[scalaObject]

  •  2
  • aioobe  · 技术社区  · 14 年前

    我有一段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]] )

    我有点惊讶,因为我认为 列表[字符] 可以看作是 列表[scalaObject] (与Java相反),2)最后一行上面的行编译!( trans 具有类型 Map[State, Set[State]] 尽管……)

    问题很明显,我做错了什么,我该如何解决?

    1 回复  |  直到 14 年前
        1
  •  4
  •   huynhjl bhericher    14 年前

    Char 不是的子类型 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("[", ", ", "]")