Учитывая, что Seq.view
возвращает SeqView
, я бы ожидал Set.view
, чтобы вернуть SetView
, но такого вида нет; Set.view
вместо этого возвращает IterableView
.Почему у Scala есть SeqView, но не SetView?
К сожалению, у IterableView
отсутствует какие-либо методы, например contains
. Сравните эти, например:
Seq(1, 2, 3).view.map(_ * 2).contains(4) // returns true
Set(1, 2, 3).view.map(_ * 2).contains(4) // error
Есть ли какая-либо конкретная причина, почему нет SetView
класса не существует?
Кроме того, есть ли причина, почему Iterable
не имеет метода contains
(учитывая, что это в основном частный случай поиска)?
Учитывая ситуацию выше, есть лучшая альтернатива этому при работе с наборами (другими словами, что является лучшей практикой в Scala):
Set(1, 2, 3).view.map(_ * 2).find(_ == 4).isDefined
О содержании содержит: http://stackoverflow.com/questions/2925765/why-does-iterator-have-a-contains-method-but-iterable-does-not-in-scala-2-8 –
Не совсем общая альтернатива, но 'Set (1, 2, 3) .exists (x => x * 2 == 4)' –