我有一个trait
Document[T]
和两个扩展该特征的案例类:
Memo(...) extends Document[Memo]
Fax(...) extends Document[Fax]
每个代表一种不同类型的文本文件。
我想使用一些文本工具来清理这些文档,但是创建同时使用这两种类型的方法使我感到烦恼。
val rawText: Seq[String]
// The text of all documents where one string in the sequence is the text of one document
val documentType = "Memo"
// Can also be "Fax"
val documentObjects = documentType match {
case "Memo" => rawText.map(_.makeMemoDocument) // results in Seq[Memo]
case "Fax" => rawText.map(_.makeFaxDocument) // results in Seq[Fax]
}
// Here lies my dilemma...
def processDocuments(docs: Seq[Document[T]]): Seq[Document[T]] = {...}
val processedDocs = processDocuments(documentObjects)
我想以某种方式定义documentObjects
,以便processDocuments
可以方便地接受它,即processDocuments
应该接受Seq[Memo]
或{{1} }作为参数。
我正在创建要通过Stanford CoreNLP管道运行的案例类,并且我希望将来能够支持添加多个扩展了Seq[Fax]
特性的案例类(例如,稍后,添加对{{ 1}})。
任何帮助将不胜感激。如果您需要更多信息,我们很乐意提供。
答案 0 :(得分:1)
val documentObjects:Document[_] = documentType match {
case "Memo" => rawText.map(_.makeMemoDocument) // results in Seq[Memo]
case "Fax" => rawText.map(_.makeFaxDocument) // results in Seq[Fax]
}
def processDocuments[T](docs: Seq[Document[T]]): Seq[Document[T]] = ???
val processedDocs = processDocuments(Seq(documentObjects))
或删除documentObjects
上的类型声明并使用
def processDocuments(docs: Seq[Document[_]]): Seq[Document[_]] = ???
//or
def processDocuments[T <: Document[_]](docs: Seq[T]): Seq[T]= ???