作为练习,我想将Scala数组集合扩展到我自己的OneBasedArray(做你期望的,索引从1开始).由于这是一个不可变的集合,我想让它在调用filter/map等时返回正确的类型.
我已经在这里,这里和这里阅读了资源,但我很难理解如何将其转换为数组(或者除了示例中的集合之外的其他集合).我是否在这种结构的正确轨道上?
class OneBasedArray[T]
extends Array[T]
with GenericTraversableTemplate[T, OneBasedArray]
with ArrayLike[T, OneBasedArray]
Run Code Online (Sandbox Code Playgroud)
是否还有其他资源可以帮助解释扩展集合?
我想要一个试图覆盖现有密钥值的Map.我试过了:
trait Unoverwriteable[A, B] extends scala.collection.Map[A, B] {
case class KeyAlreadyExistsException(e: String) extends Exception(e)
abstract override def + [B1 >: B] (kv: (A, B1)): Unoverwriteable[A, B1] = {
if (this contains(kv _1)) throw new KeyAlreadyExistsException(
"key already exists in WritableOnce map: %s".format((kv _1) toString)
)
super.+(kv)
}
abstract override def get(key: A): Option[B] = super.get(key)
abstract override def iterator: Iterator[(A, B)] = super.iterator
abstract override def -(key: A): Unoverwriteable[A, B] = super.-(key)
}
Run Code Online (Sandbox Code Playgroud)
得到了:
<console>:11: error: type mismatch;
found : …Run Code Online (Sandbox Code Playgroud)