Scalaコードを書く際に、コードをコンパイルしようとすると奇妙なエラーメッセージが表示されます。私はコードをはるかに単純なものに分解しました(意味論的な観点からは全く意味がありませんが、まだエラーを示しています)。forループをコンパイルするときに奇妙なエラーが発生する
scala> :paste
// Entering paste mode (ctrl-D to finish)
import scala.collection.mutable.ListBuffer
val map = scala.collection.mutable.Map[Int, ListBuffer[Int]]()
for (i <- 1 to 2) {
map.get(0) match {
case None => map += (1 -> ListBuffer[Int](1))
case Some(l: ListBuffer[Int]) => l += i
}
}
// Exiting paste mode, now interpreting.
<console>:12: error: type arguments [Any] do not conform to trait Cloneable's t
pe parameter bounds [+A <: AnyRef]
for (i <- 1 to 2) {
^
forループの最後に余分な行を追加し、コードは動作します:
scala> :paste
// Entering paste mode (ctrl-D to finish)
import scala.collection.mutable.ListBuffer
val map = scala.collection.mutable.Map[Int, ListBuffer[Int]]()
for (i <- 1 to 2) {
map.get(0) match {
case None => map += (1 -> ListBuffer[Int](1))
case Some(l: ListBuffer[Int]) => l += i
}
1 // <- With this line it works
}
// Exiting paste mode, now interpreting.
warning: there were 1 unchecked warnings; re-run with -unchecked for details
import scala.collection.mutable.ListBuffer
map: scala.collection.mutable.Map[Int,scala.collection.mutable.ListBuffer[Int]]
= Map(1 -> ListBuffer(1))
私は推測する、それがマッチケース文の戻り値とは何かを持っています。しかし、私はこのエラーメッセージの背後にある理由と私が間違っていることを理解するのに十分なScalaの専門家ではありません。もっと賢明な人がここで助けてくれることを願っています。
エラーメッセージの背景には何がありますか? match-case-statementの何が間違っていますか?
UPDATE:あなたがアクションでthis bugを見ている
これはおそらくバグです。 2.10では正常に動作します。 – sschaef