1
class CharacterFilter extends Filter[Character] {
def _name(n: String) = { data = data.filter(c => c.name == n) }
}
class NPCFilter extends CharacterFilter {
def name(n: String) = { _name(n); this }
}
class PlayerFilter extends CharacterFilter {
def name(n: String) = { _name(n); this }
}
我正在建立一些类,通过数据过滤。 NPCFilter
和PlayerFilter
应共享CharacterFilter
中的方法。不过,我想每一个过滤器,以在年底返回自己,这样我可以链接的功能是这样的: .name("John").age(18).race(WHITE)
斯卡拉减少重复代码继承
起初,我想这一点,但它并没有给我想要的结果,因为我离开了CharacterFilter
根据需要调用name
而不是NPCFilter
或PlayerFilter
。所以我的第一个例子完全按照我想要的方式工作,但它感觉重复(特别是一旦我添加更多的功能)。有没有办法让它更简洁?
的第一个片段很棒!我从来没有见过这个'T <:A [T]'语法。这是什么叫我可以做一些研究呢? – John
方括号表示类型参数。所以A是一个泛型类,带有类型参数T. <:是一个子类型约束,(上界),这意味着T必须是A [T]的子类型。对于你的用例,this.type是要走的路。类型参数解决方案适用于更复杂的情况。 –