1

Scala で SortedMap を拡張しようとしていますが、SortedMapLike と canBuildFrom にいくつか問題があります (最後の 1 つは正しく入力することさえできません)。ここにいくつかのコードがあります。最初のコンパニオン オブジェクト:

object Timeline {
  ...
  def newBuilder[A]: Builder[(Long, A), Timeline[A]] = 
    new ListBuffer[(Long, A)] mapResult fromSeq

  def fromSeq[A](buf: Seq[(Long, A)]): Timeline[A] = 
    new Timeline(buf toMap)

  def empty[A] = Timeline[A](Map[Long, A]())
}

次に、クラス (はい、すべてのタイムラインは からLongまでAです):

final class Timeline[A] private(t: Map[Long, A]) 
  extends SortedMap[Long, A] 
  with SortedMapLike[Long, A, Timeline[A]] {

  private[this] lazy val iMap = 
    TreeMap(t.toArray: _*)(Ordering.fromLessThan[Long](_ > _))

  override def newBuilder: Builder[(Long, A), Timeline[A]] = Timeline.newBuilder
  override def empty: Timeline[A] = Timeline.empty

  def -(key: Long) = Timeline(iMap - key)
  def get(key: Long) = iMap.get(key)
  def rangeImpl(from: Option[Long], until: Option[Long]) = 
    Timeline(iMap.rangeImpl(from, until))
  def iterator = iMap.iterator
  def ordering = iMap.ordering
}

上記のすべてがこれを達成するための正しい方法であるかどうかはわかりませんが、正しく入力することさえできない部分があります。

implicit def canBuildFrom[A]: CanBuildFrom[Timeline[A], A, Timeline[A]] =
  new CanBuildFrom[Timeline[A], A, Timeline[A]] {
    def apply(): Builder[(Long, A), Timeline[A]] = newBuilder[A]
    def apply(from: Timeline[A]): Builder[(Long, A), Timeline[A]] = newBuilder[A]
  }
4

1 に答える 1

1

間違って入力していたようですcanBuildFrom

implicit def canBuildFrom[A]: CanBuildFrom[Timeline[A], (Long, A), Timeline[A]] = 
  new CanBuildFrom[Timeline[A], (Long, A), Timeline[A]] {
    def apply(): Builder[(Long, A), Timeline[A]] = newBuilder[A]
    def apply(from: Timeline[A]): Builder[(Long, A), Timeline[A]] = newBuilder[A]
  }
于 2012-04-12T14:03:01.500 に答える