gpt4 book ai didi

Scala 扩展 Map(或 HashMap)并允许映射的构造函数列表

转载 作者:行者123 更新时间:2023-12-04 00:43:45 25 4
gpt4 key购买 nike

我有一个特殊的Map,它最终会做一些值的一致性检查,这些值被限制为具有特殊意义。现在我只想创建一个完全像 Map[String, Any] 的模式,特别是我想实例化一个映射列表,而不是强制指定 Map 的类型,所以它们总是 [String, Any]。所以不是

val myMap:Map[String,Any] = Map("one" -> 1, "two" -> "2", ...)

我希望能够:

val mySchema:Schema = Schema("one" -> 1, "two" -> "2", ...)

Map 是一个 trait,所以我想我需要扩展一个像 HashMap 这样的类

class Schema extends HashMap[String, Any]

当我用我得到的初始映射列表实例化它时

val mySchema = new Schema("one" -> 1, "two" -> "2", ...)

Error:(110, 19) too many arguments for constructor Schema: ()drivers.Schema
val mySchema = new Schema("one" -> 1, "two" -> "2")
^

HashMap 内部有一些我无法阅读的魔法(它扩展 1 个类具有 5 个特征)。但看起来构造函数的“内容”(映射列表?)被传递给了某个东西的 initWithContents(contents) 伪构造函数。我需要那样的东西吗?

最佳答案

class Schema(elems: Tuple2[String, Any]*) extends HashMap[String, Any] {
this ++= elems
}

val mySchema = new Schema("one" -> 1, "two" -> "2")

解释:

不幸的是,这不适用于不可变的 HashMap。据我所知,“扩展”不可变 HashMap 的唯一方法是创建一个类,该类包含对一个 HashMap 的内部引用,例如在 this answer到关于 SO 的类似问题。

关于Scala 扩展 Map(或 HashMap)并允许映射的构造函数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834164/

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