List 列出与其类型匹配的元素
我有一个类似于下面的代码:List 列出与其类型匹配的元素,list,scala,pattern-matching,List,Scala,Pattern Matching,我有一个类似于下面的代码: def walkTree(list:List[Command]) { list match { case Command1::rest => doSomething(); walkTree(rest) case Command2::rest => doSomethingElse(); walkTree(rest) case Nil => ; } } 我还知道,您可以对特定类型进行模式匹
def walkTree(list:List[Command]) {
list match {
case Command1::rest => doSomething(); walkTree(rest)
case Command2::rest => doSomethingElse(); walkTree(rest)
case Nil => ;
}
}
我还知道,您可以对特定类型进行模式匹配,同时分配一个变量:
try {
...
}
catch {
case ioExc:IOException => ioExc.printStackTrace()
case exc:Exception => throw new RuntimeException("Oh Noes", e);
}
有没有一种方法可以将两者结合在一起,如下所示:
def walkTree(list:List[Command]) {
list match {
case cmd1:Command1::rest => doSomething(); walkTree(rest)
case cmd2:Command2::rest => doSomethingElse(); walkTree(rest)
case Nil => ;
}
}
或者我需要在匹配之前提取每个列表元素吗?是的,只需像这样使用括号(参见下面的示例): 但是,您不能为此使用
foreach
:
scala> List(A(1), B(2), A(3), B(4), A(5)).foreach(_ match {
| case (a:A) => println("a:" + a)
| case (b:B) => println("b:" + b)
| })
a:A(1)
b:B(2)
a:A(3)
b:B(4)
a:A(5)
例如:
scala> case class A(val i: Int);
defined class A
scala> case class B(val i: Int);
defined class B
scala> def walkTree(list: List[ScalaObject]) {
| list match {
| case (a:A)::rest => println("a:" + a); walkTree(rest);
| case (b:B)::rest => println("b:" + b); walkTree(rest);
| case Nil => ;
| }
| }
walkTree: (list: List[ScalaObject])Unit
scala> walkTree(List(A(1), B(2), A(3), B(4), A(5)))
a:A(1)
b:B(2)
a:A(3)
b:B(4)
a:A(5)
使用
foreach
然后在每个元素上进行模式匹配对我来说似乎更清晰:
def walkTree(list:List[Command]) {
list foreach {
_ match {
case cmd1:Command1 => doSomething()
case cmd2:Command2 => doSomethingElse()
case _ =>
}
}
}
Foreach使这个方法不是递归的,递归是我代码中需要的东西。不过还是要谢谢你的回答;)
def walkTree(list:List[Command]) {
list foreach {
_ match {
case cmd1:Command1 => doSomething()
case cmd2:Command2 => doSomethingElse()
case _ =>
}
}
}