Вопрос

Очевидно, у 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top