目前我有以下代码:
case class Foo(text: String, tag: Tag) {...}
object Foo {
def doSomething(fooSeq: Seq[Foo]) = fooSeq.map(f => f.tag)
def doSomethingElse() = {...}
}
我想将doSomething
方法移动到抽象类/特征中,以便我可以参数化标记并稍后重用代码。理想情况下,我想做这样的事情:
case class Foo(text: String, tag: Tag) {...}
object Foo extends TraitFoo[Tag] {
def doSomethingElse() = {...}
}
---------------in another file----------------
trait TraitFoo[T] = {
def doSomething(fooSeq: Seq[TraitFoo[T]]) = fooSeq.map(f => f.tag)
}
但是,编译器抱怨它无法识别f.tag
内的TraitFoo
。
我考虑使用抽象类,但这也会导致问题,因为我的对象Foo不需要构造函数。它只需要访问其伴随类中的字段。
答案 0 :(得分:0)
也许您可以使用结构绑定向match-row
添加另一个类型参数?像这样:
TraitFoo
这与此基本相同,但不那么冗长/不那么明确:
trait TraitFoo[A, B <: { def tag: A }] {
def doSomething(fooSeq: Seq[B]): Seq[A] = fooSeq.map(f => f.tag)
}
case class Foo(text: String, tag: Tag) { ... }
object Foo extends TraitFoo[Tag, Foo] {
def doSomethingElse() = { ... }
}