Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Not an array, but here's a one-based immutable IndexedSeq implementation that I recently put together. I followed the example given <a href="http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html" rel="nofollow">here</a> where they implement an RNA class. Between that example, the ScalaDocs, and lots of "helpful" compiler errors, I managed to get it set up correctly. The fact that OneBasedSeq is genericized made it a little more complex than the RNA example. Also, in addition to the traits extended and methods overridden in the example, I had to extend <code>IterableLike</code> and override the <code>iterator</code> method, because various methods call that method behind the scenes, and the default iterator is zero-based.</p> <p>Please pardon any stylistic or idiomadic oddities; I've been programming in Scala for less than 2 months.</p> <pre><code>import collection.{IndexedSeqLike, IterableLike} import collection.generic.CanBuildFrom import collection.mutable.{Builder, ArrayBuffer} // OneBasedSeq class final class OneBasedSeq[T] private (s: Seq[T]) extends IndexedSeq[T] with IterableLike[T, OneBasedSeq[T]] with IndexedSeqLike[T, OneBasedSeq[T]] { private val innerSeq = s.toIndexedSeq def apply(idx: Int): T = innerSeq(idx - 1) def length: Int = innerSeq.length override def iterator: Iterator[T] = new OneBasedSeqIterator(this) override def newBuilder: Builder[T, OneBasedSeq[T]] = OneBasedSeq.newBuilder override def toString = "OneBasedSeq" + super.toString } // OneBasedSeq companion object object OneBasedSeq { private def fromSeq[T](s: Seq[T]) = new OneBasedSeq(s) def apply[T](vals: T*) = fromSeq(IndexedSeq(vals: _*)) def newBuilder[T]: Builder[T, OneBasedSeq[T]] = new ArrayBuffer[T].mapResult(OneBasedSeq.fromSeq) implicit def canBuildFrom[T, U]: CanBuildFrom[OneBasedSeq[T], U, OneBasedSeq[U]] = new CanBuildFrom[OneBasedSeq[T], U, OneBasedSeq[U]] { def apply() = newBuilder def apply(from: OneBasedSeq[T]): Builder[U, OneBasedSeq[U]] = newBuilder[U] } } // Iterator class for OneBasedSeq class OneBasedSeqIterator[T](private val obs: OneBasedSeq[T]) extends Iterator[T] { private var index = 1 def hasNext: Boolean = index &lt;= obs.length def next: T = { val ret = obs(index) index += 1 ret } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload