Với những định nghĩa:
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)
}
Bạn có thể làm kiểm tra như thế này:
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
Vì vậy, các mã bạn cần sẽ là:
val m = x in (0 to 10)
Nguồn
2014-09-26 12:47:52
Lưu ý rằng bằng cách viết "0 đến 10" bạn có nghĩa là 0, 1, 2,. .., 9 (bao gồm 0, không bao gồm 10). Nếu bạn muốn bao gồm 10, sử dụng "0 đến 10". – Jesper
Xem câu hỏi về lưu lượng truy cập stackoverflow có liên quan: [Làm cách nào để có thể khớp mẫu trên một phạm vi trong Scala?] (Http://stackoverflow.com/questions/3160888/how-can-i-pattern-match-on-a-range-in -scala) –
Tiêu đề yêu cầu cách đối sánh giá trị loại 'Phạm vi' với một số khả năng, ví dụ: "Tôi có' (0..5) 'hay' (1..6) '?" – Raphael