0

我创建了一个抽象基类,如下所示:

abstract class parent

然后我继续创建了两个从父类继承的案例类:

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”作为我的列表条目,即使对于“child2”,我也得到了 Child1。

很困惑,谁能告诉我这是怎么回事?

4

1 回答 1

4

问题出在这里:child1 和 child2 是为容纳结果而创建的新变量。

res2 map {case child1 => "Child1";case child2 => "Child2"}

尝试这个:

res2 map {case x:child1 => "Child1";case y:child2 => "Child2"}

xy分别是具有关联类型child1和的变量child2

于 2013-01-29T05:36:54.430 回答