Так дали список:Почему Scala List [Int] .contains принимает параметр [Int]?
val a:List[Int] = List(1,2,3)
Вы можете сделать:
a.contains(Option(2))
который возвращает ложь. Я понимаю, из следующих определений функций, что позволяет этому компилировать на все это было сделано с целью:
def contains[A1 >: A](elem : A1) : scala.Boolean = {...}
sealed abstract class Option[+A]() ...
То, что я не понимаю, почему - есть случай использования, где это полезно? Если он автоматически сглаживает опцию перед сравнением, поэтому приведенное выше значение возвращает true, тогда оно может быть полезно, но поскольку оно всегда будет возвращать false.
Я спрашиваю, потому что легко забыть разворачивать переменную Option, которую вы передаете в List.contains, что приводит к потенциально затруднению поиска ошибок.
Спасибо!
Как указано, 'contains()' принимает любой тип arg. Чтобы сохранить безопасность типов, мы можем использовать 'exists()'. – jwvh
Спасибо всем, просто для подведения итогов для других - существуют следующие 2 варианта для сохранения безопасности типа (т. Е. Оба не скомпилируются): 'a.contains [Int] (опция (2))' и 'a.exists (_ = = Option (2)) ' – JBY