Scala减少继承中的重复代码
我正在构建一些过滤数据的类。NPCFilter和PlayerFilter应该共享CharacterFilter中的方法。但是,我希望每个过滤器在最后返回它们自己,以便我可以像这样链接函数: .姓名约翰18岁白人 起初我尝试了这个,但它没有给出我想要的结果,因为在调用name之后,我只剩下一个CharacterFilter,而不是NPCFilter或PlayerFilterScala减少继承中的重复代码,scala,inheritance,Scala,Inheritance,我正在构建一些过滤数据的类。NPCFilter和PlayerFilter应该共享CharacterFilter中的方法。但是,我希望每个过滤器在最后返回它们自己,以便我可以像这样链接函数: .姓名约翰18岁白人 起初我尝试了这个,但它没有给出我想要的结果,因为在调用name之后,我只剩下一个CharacterFilter,而不是NPCFilter或PlayerFilter class CharacterFilter extends Filter[Character] { def _nam
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 }
}
因此,我的第一个示例正是按照我所希望的方式工作的,但它感觉是重复的,尤其是当我添加更多函数时。有没有办法使它更简洁?对于您返回此文件的特定情况,有一个直接的支持:
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 {
}
写这篇文章时,这是唯一有效的返回值,编译器将键入它,就像它键入调用f的目标一样
除此之外,如果您的返回类型在某种程度上与目标类型相关,但不一定是这样,那么您需要一个类型成员或泛型,例如
def f(....) : this.type = ....
对于您返回此信息的特定情况,有直接支持:
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 {
}
写这篇文章时,这是唯一有效的返回值,编译器将键入它,就像它键入调用f的目标一样
除此之外,如果您的返回类型在某种程度上与目标类型相关,但不一定是这样,那么您需要一个类型成员或泛型,例如
def f(....) : this.type = ....
第一个片段非常有用!我从来没有见过这个T,方括号表示类型参数。因此A是一个泛型类,带有类型参数T。第一个代码段非常有用!我从来没有见过这个T,方括号表示类型参数。所以A是一个泛型类,带有类型参数T