次のように抽象基本クラスを作成しました。
abstract class parent
次に、先に進み、親クラスを継承する2つのケースクラスを作成しました。
case class child1(name:String,category:String) extends parent
case class child2(name:String,category1:String,category2:String) extends parent
次に、キックのために、親タイプのリストを作成し、それにchild1とchild2を追加しました。
val childList = List[parent]()
scala> child1("Child","One") :: child2("Child","Two","dhshs")::childList
res2: List[parent] = List(child1(Child,One), child2(Child,Two,dhshs))
これまでのところ、List[Parent]には2つの子タイプが含まれています。
ここで、リストをトラバースし、子の基になるタイプに基づいて、その特定のタイプに対して特別なことを行います。だから私はこれを行います:
scala> res2 map {case child1 => "Child1";case child2 => "Child2"}
私は、を見ると思っていましたList[String]("Child1","Child2")
が、代わりに次のようになりました。
<console>:15: error: unreachable code
res2 map {case child1 => "Child1";case child2 => "Child2"}
さて、もう少しキックするために、私は次のことをしました:
scala> res2 map {r => r match {case child1 => "Child1"}}
res8: List[java.lang.String] = List(Child1, Child1)
scala> res2 map {case child1 => "Child1"}
res9: List[java.lang.String] = List(Child1, Child1)
ご覧のとおり、リストエントリとして「Child1」を取得しました。「child2」の場合でも、Child1を取得します。
かなり混乱しています、誰かがここで何が起こっているのか教えてもらえますか?