12

Seq[T]任意を取り、返すメソッドも実装したいと思いSeq[T]ます。ただし、Stringが提供されると、も返されStringます。

からへStringの暗黙の変換によりパスは機能しますが、代わりに取得します。戻ることは可能ですか?StringWrappedString 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)

firstAndLast()実装は無関係であり、単なる例です。

4

1 に答える 1

15

はい、可能です。あなたはそれらの派手なものの1つを要求する必要があるでしょう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
}

これはアレイでも機能します。ボーナス:例のすべての行がコンパイルされ、期待どおりに機能します。

于 2012-05-21T16:59:13.920 に答える