Ответ 1
Защита с использованием Range
:
val m = t match {
case x if 0 until 10 contains x => true
case _ => false
}
Можно ли совместить диапазон значений в Scala?
Например:
val t = 5
val m = t match {
0 until 10 => true
_ => false
}
m
будет true
, если t
находилось между 0 и 10, но false в противном случае. Это немного не работает, но есть ли способ достичь чего-то подобного?
Защита с использованием Range
:
val m = t match {
case x if 0 until 10 contains x => true
case _ => false
}
Вы можете использовать защитные устройства:
val m = t match {
case x if (0 <= x && x < 10) => true
case _ => false
}
Здесь другой способ сопоставления с использованием диапазона:
val m = t match {
case x if ((0 to 10).contains(x)) => true
case _ => false
}
С этими определениями:
trait Inspector[-C, -T] {
def contains(collection: C, value: T): Boolean
}
implicit def seqInspector[T, C <: SeqLike[Any, _]] = new Inspector[C, T]{
override def contains(collection: C, value: T): Boolean = collection.contains(value)
}
implicit def setInspector[T, C <: Set[T]] = new Inspector[C, T] {
override def contains(collection: C, value: T): Boolean = collection.contains(value)
}
implicit class MemberOps[T](t: T) {
def in[C](coll: C)(implicit inspector: Inspector[C, T]) =
inspector.contains(coll, t)
}
Вы можете делать такие проверки:
2 in List(1, 2, 4) // true
2 in List("foo", 2) // true
2 in Set("foo", 2) // true
2 in Set(1, 3) // false
2 in Set("foo", "foo") // does not compile
2 in List("foo", "foo") // false (contains on a list is not the same as contains on a set)
2 in (0 to 10) // true
Таким образом, вам нужен код:
val m = x in (0 to 10)