gpt4 book ai didi

列出与其类型匹配的元素

转载 作者:行者123 更新时间:2023-12-04 05:00:46 24 4
gpt4 key购买 nike

我有一个类似于下面的代码:

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 => ;
}
}

还是我需要在匹配之前提取每个列表元素?

最佳答案

是的,只需使用这样的括号即可(请参见下面的示例):

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)

关于列出与其类型匹配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6290150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com