我在使用视图界限时遇到了一些问题。我编写了以下函数,该函数应接受任何可视为
到目前为止一切顺利。现在让我们尝试一个非空列表...
太好了,那数组呢?
Seq[T]
的对象seq
并在其为空时返回None
,否则返回Some(seq)
。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
不应该处理这个吗?
scala.collection.Seq
时,它有效,但对于原始帖子中的scala.collection.immutable.Seq
无效。我不认为从Array[T]
到scala.collection.immutable.Seq[T]
有视图... - Patryk Ćwiek