我有一堆使用 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() 方法的对象,所以第二行不会编译。
我觉得我在这里缺少一些基本的东西......