NPCFilter
我正在构建一些过滤数据的类。 PlayerFilter
和CharacterFilter
应该共享.name("John").age(18).race(WHITE)
中的方法。但是,我希望每个过滤器都在最后返回,以便我可以链接这样的函数:
CharacterFilter
起初我尝试了这个,但它没有给出我想要的结果,因为在调用name
而不是NPCFilter
或{{1}后,我留下了PlayerFilter
根据需要。
class CharacterFilter extends Filter[Character] {
def name(n: String) = { data = data.filter(c => c.name == n); this }
}
class NPCFilter extends CharacterFilter {
}
class PlayerFilter extends CharacterFilter {
}
所以我的第一个例子完全符合我的要求,但它感觉重复(特别是一旦我添加了更多的功能)。有没有办法让它更简洁?
答案 0 :(得分:4)
对于您返回this
的特定情况,有直接支持:
def f(....) : this.type = ....
写一下,this
是唯一有效的返回值,编译器会在键入调用f
的目标时键入它。
如果没有特定情况,如果您的返回类型与目标类型有某种关联,但不一定与this
有关,则需要类型成员或通用,例如
abstract class A[T <: A[T]] {self: T =>
def f(....): T
}
class B extends A[B] { ... }