gpt4 book ai didi

scala - 如何在 Scala 中为特定 Map 类型创建类型别名

转载 作者:行者123 更新时间:2023-12-04 13:11:57 25 4
gpt4 key购买 nike

我有一堆使用 Map[String, Float] 的代码。所以我想做

type DocumentVector = Map[String, Float]
...
var vec = new DocumentVector

但这不能编译。我收到消息:
trait Map is abstract; cannot be instantiated
[error] var vec = new DocumentVector

好的,我想我明白这里发生了什么。 Map 不是一个具体的类,它只是通过 () 生成一个对象。所以我可以这样做:
object DocumentVector { def apply() = { Map[String, Float]() } }
...
var vec = DocumentVector()

这有效,虽然它有点笨重。但现在我想嵌套类型。我想写:
type DocumentVector = Map[String, Float]
type DocumentSetVectors = Map[DocumentID, DocumentVector]

但这给出了相同的“无法实例化”的问题。所以我可以尝试:
object DocumentVector { def apply() = { Map[String, Float]() } }
object DocumentSetVectors { def apply() = { Map[DocumentID, DocumentVector]() } }

但 DocumentVector 实际上不是一个类型,只是一个带有 apply() 方法的对象,所以第二行不会编译。

我觉得我在这里缺少一些基本的东西......

最佳答案

只需具体说明您想要哪种 map

scala> type DocumentVector = scala.collection.immutable.HashMap[String,Float]
defined type alias DocumentVector

scala> new DocumentVector
res0: scala.collection.immutable.HashMap[String,Float] = Map()

除非您需要抽象 Map 类型的灵活性,在这种情况下,没有比将类型别名与工厂分离更好的解决方案(这可能是一个简单的方法,不需要带有应用的对象)。

关于scala - 如何在 Scala 中为特定 Map 类型创建类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459510/

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