可以在Scala中匹配范围吗?

Jus*_*iey 49 scala range pattern-matching matching

是否可以匹配Scala中的一系列值?

例如:

val t = 5
val m = t match {
    0 until 10 => true
    _ => false
}
Run Code Online (Sandbox Code Playgroud)

mtrue,如果t为0和10,但假另有.这一点当然不起作用,但有没有办法实现类似的东西?

Ale*_*rov 77

警卫使用Range:

val m = t match {
  case x if 0 until 10 contains x => true
  case _ => false
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*nov 32

你可以使用警卫:

val m = t match {
    case x if (0 <= x && x < 10) => true
    case _ => false
}
Run Code Online (Sandbox Code Playgroud)

  • 在性能方面,该解决方案优于@ alexander-azarov解决方案。此处需要初始化范围,然后进行范围扫描。尤其对于大范围,这可能成为问题。 (2认同)