scala - 列表的Scala匹配模式
问题描述
val res1 = -1
val res2: List[Int] = List.empty
val res3 = -1
经过一些操作,res2可以有多个元素,但是所有的值都必须是-1
如何使用此列表进行模式匹配?
在此之前,什么时候res2
是Int
,我使用了这种模式:
(r1, r2, r3) match {
case (-1, -1, -1) => Success()
case _ => throw new Exception("Invalid results")
}
现在我需要类似的东西
(r1, r2, r3) match {
case (-1, List(-1, -1, ...), -1) => Success()
case _ => throw new Exception("Invalid results")
}
我知道我可以使用List.forall
or List.exists
,但这是匹配模式之外的。
更新:我找到了一个很好的解决方案
val r2res = r2.forall(x => x == -1)
(r1, r2res, r3) match {
case (-1, true, -1) => Success()
case _ => throw new Exception("Invalid results")
}
如果存在直接匹配 res2 结果的方法,请随时发表回复。谢谢
解决方案
您可以在模式匹配中使用模式防护:
(r1, r2, r3) match {
case (-1, l:List[Int], -1) if l.forall(_ == -1) => Success()
case _ => throw new Exception("Invalid results")
}
推荐阅读
- angular - @angular/compiler-cli 的版本需要为 2.3.1 或更高版本。当前版本是“7.0.1”
- laravel - 注销后如何重定向回来,除非页面需要身份验证?
- vuetify.js - vuetifyjs:如何在 v-data-table 中创建多行标题?
- c# - 我应该如何通过 Autofac.Dependency 注入库将参数传递给 Autofac 容器以进行自动依赖解析
- javascript - 计算多个输入的差异并写在页面上
- c++ - 复合赋值重载 (C++)
- apache-httpclient-4.x - Apache HTTPClient DigestAuth 不会从 Challenge 转发“不透明”值
- java - Spring Boot在配置问题中定义bean
- css - 使两列高度相等的问题
- angular - Angular http.get 帮助