我创建了一个抽象基类,如下所示:
abstract class parent
然后我继续创建了两个从父类继承的case类:
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]中有两个子类型。
现在,我想遍历List并根据子类的基础类型,为该特定类型执行特殊操作。所以我这样做:
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”作为我的List条目,即使对于“child2”我也得到了Child1。
很困惑,有人能告诉我这里发生了什么吗?
答案 0 :(得分:4)
问题在于:child1和child2是为容纳结果而创建的新变量。
res2 map {case child1 => "Child1";case child2 => "Child2"}
试试这个:
res2 map {case x:child1 => "Child1";case y:child2 => "Child2"}
x
和y
分别是关联类型child1
和child2
的变量。