У меня есть trait
Document[T]
и два класса case, которые расширяют эту черту:
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]
, либо Seq[Fax]
в качестве аргумента.
Я создаю классы дел для запуска через конвейер Stanford CoreNLP, и я хочу иметь возможность поддерживать добавление нескольких классов дел, расширяющих черту Document[T]
в будущем (например, позже добавим поддержку Pamphlet(...) extends Document[Pamphlet]
) .
Любая помощь будет принята с благодарностью. Если вам потребуется дополнительная информация, я с удовольствием предоставлю ее.