Scala Range содержит (элемент: любой) метод
Вопрос
Очевидно, у Range
есть метод, который проверяет, содержит ли он значение типа Any.Я понимаю, что это код сгенерированного кода, но вызывает некоторые проблемы.
Например, я сравнивал часы с joda.DateTime:
родовое слово Здесь d.hourOfDay () возвращает DateTime.Property, а не Int, но код по-прежнему компилируется из-за SeqLike
.Есть ли способ проверить такие вызовы во время компиляции?
Решение
Вы можете pimp сгенерировать код кода, чтобы добавить более безопасный для типов метод contains:
родовое слово Импортируйте неявный код и вызовите код Range
для любого экземпляра диапазона:
Другие советы
Вы можете использовать безопасное для типа equals (===
) Scalaz вместе с методом exists
для TraversableOnce
.
на основе STALADOCS для диапазона Похоже, что нет лучшего метода диапазона, который вы могли бы использовать.Ваши варианты кажутся
Используйте явную подпись типа:
case d if 0 to 12 contains (d.hourOfDay(): Int) => ...
.
Сделайте свой собственный метод:
def containsInt(r: Range, i: Int) = ...
.
Это кажется, что от Java GenaCodicetacodcode, будучи предварительно универсальными, и является лишь одним из неудобств этого факта вызывает SCALA.