कोई सरणी नहीं है, लेकिन यहां एक एक-आधारित अपरिवर्तनीय इंडेक्सडैक कार्यान्वयन है जिसे मैंने हाल ही में एक साथ रखा है। मैंने here दिए गए उदाहरण का पालन किया जहां वे एक आरएनए कक्षा लागू करते हैं। उस उदाहरण के बीच, ScalaDocs, और "सहायक" कंपाइलर त्रुटियों के बहुत सारे, मैं इसे सही तरीके से स्थापित करने में कामयाब रहा। तथ्य यह है कि OneBasedSeq जेनेरिक है, इसे आरएनए उदाहरण से थोड़ा अधिक जटिल बना दिया गया है। इसके अलावा, उदाहरणों में विस्तारित तरीकों और विधियों को ओवरराइड करने के अलावा, मुझे IterableLike
का विस्तार करना था और iterator
विधि को ओवरराइड करना था, क्योंकि विभिन्न विधियां दृश्यों के पीछे उस विधि को कॉल करती हैं, और डिफ़ॉल्ट इटरेटर शून्य-आधारित है।
कृपया किसी भी स्टाइलिस्ट या मुहावरे संबंधी विषमता को क्षमा करें; मैं 2 महीने से भी कम समय के लिए स्कैला में प्रोग्रामिंग कर रहा हूं।
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 <= obs.length
def next: T = {
val ret = obs(index)
index += 1
ret
}
}
स्रोत
2013-02-13 02:55:32
ब्रावो जानकारी के लिंक जोड़ने के लिए अधिक से अधिक सवाल का जवाब देने ही नहीं, पूछा एक^_^ –
@Dylan बस जवाब "वहाँ किसी भी आगे संसाधन है कि मदद का विस्तार संग्रह समझाने हैं?" :) – pedrofurla