У меня возникают проблемы с ограничениями зрения. Я написал следующую функцию, которая должна взять любой объект seq
в качестве Seq[T]
и вернуть None
, если он пуст, или Some(seq)
в противном случае.Неявное преобразование в Seq [T] из массива [T]
def noneIfEmpty[T, S <% Seq[T]](seq: S): Option[S] =
if (seq.isEmpty) None else Some(seq)
Определим функцию ...
scala> def noneIfEmpty[T, S <% Seq[T]](seq: S): Option[S] = ...
noneIfEmpty: [T, S](seq: S)(implicit evidence$1: S => scala.collection.immutable.Seq[T])Option[S]
Хорошо, функция подписи выглядит правильно. Попробуем пустой список ...
scala> noneIfEmpty(List())
res54: Option[List[Nothing]] = None
Пока все хорошо. Теперь давайте попробуем непустой список ...
scala> noneIfEmpty(List(1,2,3))
res55: Option[List[Int]] = Some(List(1, 2, 3))
Отлично. Как насчет массива?
scala> noneIfEmpty(Array())
<console>:15: error: No implicit view available from Array[Nothing] => scala.collection.immutable.Seq[Any].
noneIfEmpty(Array())
^
Не так уж и много. Что тут происходит? Нет ли неявного преобразования от Array[T]
до WrappedArray[T]
? Не должно scala.Predef.wrapRefArray
позаботиться об этом?
Работает для меня в консоли 2.11.2. – Ashalynd
То же самое, какую версию scala вы используете? –
Это работает, когда это просто 'scala.collection.Seq', но не для' scala.collection.immutable.Seq', как в исходном сообщении. Я не думаю, что есть представление из 'Array [T]' в 'scala.collection.immutable.Seq [T]' ... –