2010-11-20 5 views
2

を必要と:次のツー最後の行は罰金コンパイルScalaのエラー:実測一覧[シャア]、私はScalaのコードのこのスニペットを持っ一覧[ScalaObject]

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, ", ") 

が、最後の行に私を得ますエラー

Found List[Char] , required List[ScalaObject]

labelingMap[State, Set[Char]]を有する。)

私はList[Char]がのサブタイプとして見ることができると考え1)ので、ビット驚い(Javaとは対照的に)、2)最後の行の上にある行がコンパイルされます。 (transのタイプはMap[State, Set[State]]ですが...)

質問は間違っていますが、どうすれば修正できますか?

答えて

4

Charは、ScalaObjectのサブタイプではありません。

トップには、すべてのスーパータイプのAnyがあります。おそらくScalaObjectAnyに置き換えることができ、コードをコンパイルする必要があります。

タイプ階層図については、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("[", ", ", "]") 
+0

完璧、ありがとう! mkString;ありがとう) – aioobe