gpt4 book ai didi

generics - 扩展 Scala 集合

转载 作者:行者123 更新时间:2023-12-04 17:13:40 26 4
gpt4 key购买 nike

我想要一个 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)
}

并得到:
<console>:11: error: type mismatch;
found : scala.collection.Map[A,B1]
required: Unoverwirteable[A,B1]
super.+(kv)
^
<console>:16: error: type mismatch;
found : scala.collection.Map[A,B]
required: Unoverwirteable[A,B]
abstract override def -(key: A): Unoverwirteable[A, B] = super.-(key)
^

我对 Scala 很陌生,无法找到克服这个问题的方法。有什么帮助吗? :)

编辑:我正在使用 Scala 2.8.0.Beta1-prerelease(这给 scala.collection 带来了一些变化)

最佳答案

这修复了您的编译错误:

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)): scala.collection.Map[A, B1] = {
if (this contains(kv _1)) throw new KeyAlreadyExistsException(
"key already exists in WritableOnce map: %s".format((kv _1) toString)
)
super.+[B1](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): scala.collection.Map[A, B] = super.-(key)
}

不过,我觉得你真的很想装饰 collection.mutable.Map#+= , 如下:
trait Unoverwriteable[A, B] extends collection.mutable.Map[A, B] {
case class KeyAlreadyExistsException(e: String) extends Exception(e)

abstract override def +=(kv: (A, B)): this.type = {
if (this contains (kv _1))
throw new KeyAlreadyExistsException("key already exists in WritableOnce map: %s".format((kv _1) toString))
super.+=(kv)
}
}

关于generics - 扩展 Scala 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2259297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com