Tom*_*icz 11 scala scala-collections
我想实现任意Seq[T]和返回的方法Seq[T].但是什么时候String提供它也应该返回String.
路过String由于一些隐式转换,从作品String到WrappedString extends IndexedSeq[Char],但我得到Seq[Char]的回报.有可能String回来吗?
val sx: Seq[Int] = firstAndLast(List(1, 2, 3, 4))
val s1: Seq[Char] = firstAndLast("Foo Bar")
val s2: String = firstAndLast("Foo Bar") //incompatible types error
def firstAndLast[T](seq: Seq[T]) = Seq(seq.head, seq.last)
Run Code Online (Sandbox Code Playgroud)
firstAndLast() 实现是无关紧要的,它只是一个例子.
Jea*_*let 15
对的,这是可能的.你必须要求其中一个花哨CanBuildFrom的:
import scala.collection.generic.CanBuildFrom
def firstAndLast[CC, A, That](seq: CC)(implicit asSeq: CC => Seq[A], cbf: CanBuildFrom[CC, A, That]): That = {
val b = cbf(seq)
b.sizeHint(2)
b += seq.head
b += seq.last
b.result
}
Run Code Online (Sandbox Code Playgroud)
这也适用于数组.额外奖励:示例中的所有行都将按预期编译和工作.
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |