scala中多个参数的模式匹配

scala中多个参数的匹配守卫

scala中强大且简洁的模式匹配常用于各种逻辑判断场景。

我们常用的模式匹配场景一般如下:

val x = 1
val str = x match {
   
    case 0 => "我是0。"
    case 1 => "我是1。"
    case _ => "我是谁?"
}

此时 str 的值只决定于对 x 的逻辑判断。

但很多业务场景中,某些量的赋值决定于多个值,此时我们需要借用匹配守卫:

val x = 1
val y = 2
val str = x match {
    // y match ...
    case 1 if y == 1  => "我是0。"
    case 1 if y == 2  => "我是1。"
    case _ => "我是谁?"
}

此处无论是写成 x match … 或者 y match … 代码都能行。

但这种写法并不雅观,逻辑判断中明明需要两个或者更多的值,为何只需要填入一个?

其实当我们使用 case _ if … 时,用什么 match 已经无所谓,因为 if 后面的参数会默认从全局变量中寻找。

那么此时我们可以将代码改写成:

val x = 1
val y = 2
val str = AnyRef match {
    
    case _ if x == 1 && y == 1  => "我是0。"
    case _ if x == 1 && y == 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scala 模式匹配是一种强大的功能,它可以用于匹配各种类型的数据结构。模式匹配是一种类似于 switch 语句的结构,但比 switch 更灵活,因为它可以匹配更多的数据类型,而且可以嵌套使用。 在 Scala 模式匹配使用 match 关键字。match 表达式可以匹配一个值,然后根据匹配的结果执行不同的操作。匹配的结果可以是常量、变量、类型、构造函数等。 下面是一个简单的例子,展示了如何使用模式匹配来匹配一个整数值: ```scala val x = 2 x match { case 1 => println("One") case 2 => println("Two") case _ => println("Other") } ``` 在这个例子,我们定义了一个整数变量 x,然后使用 match 表达式来匹配它的值。如果 x 的值为 1,就会执行第一个 case 分支;如果 x 的值为 2,就会执行第二个 case 分支;如果 x 的值不是 1 或 2,就会执行最后一个 case 分支。 除了常量之外,模式匹配还可以匹配变量、类型、构造函数等。例如,我们可以使用模式匹配来匹配一个列表: ```scala val lst = List(1, 2, 3) lst match { case Nil => println("Empty list") case head :: tail => println(s"Head: $head, Tail: $tail") } ``` 在这个例子,我们定义了一个列表 lst,然后使用 match 表达式来匹配它。如果 lst 是一个空列表,就会执行第一个 case 分支;否则,就会执行第二个 case 分支。在第二个 case 分支,我们使用了模式 head :: tail 来匹配非空列表。head 表示列表的第一个元素,tail 表示列表的剩余部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值