加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

列出与其类型匹配的元素

发布时间:2020-12-16 09:03:03 所属栏目:安全 来源:网络整理
导读:我有一个类似下面的代码: 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 => ;
    }
}

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

解决方法

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

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),A(5)))
a:A(1)
b:B(2)
a:A(3)
b:B(4)
a:A(5)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读