Scala 独立于外部类实例为内部类定义有序实例
我试图指定所有AbstractTaskKey都是有序的,无论它们属于哪个AbstractTaskKey容器 如下面的代码所示,很容易为每个特定的外部类指定一个顺序,但这意味着在每个不同的地方,我希望对需要使用sortBy的所有键进行排序(或者定义一个专门用于范围内的任何子外部类的隐式ord) 我希望能够为AbstractTaskKey定义一个适用于AbstractTaskKey所有子类的有序实例 正如其他SO帖子所建议的那样,我尝试在一堆不同的地方添加不同的方差注释、子类和通配符,但没有效果 如何使AbstractTaskKey的已排序实例(或排序)通用Scala 独立于外部类实例为内部类定义有序实例,scala,inner-classes,traits,Scala,Inner Classes,Traits,我试图指定所有AbstractTaskKey都是有序的,无论它们属于哪个AbstractTaskKey容器 如下面的代码所示,很容易为每个特定的外部类指定一个顺序,但这意味着在每个不同的地方,我希望对需要使用sortBy的所有键进行排序(或者定义一个专门用于范围内的任何子外部类的隐式ord) 我希望能够为AbstractTaskKey定义一个适用于AbstractTaskKey所有子类的有序实例 正如其他SO帖子所建议的那样,我尝试在一堆不同的地方添加不同的方差注释、子类和通配符,但没有效果 如
对象HelloWorld{
def main(参数:数组[字符串]){
val someTaskKeyConsumer=新的someTaskKeyConsumer[FooTaskKeys](FooTaskKeys)
println(someTaskKeyConsumer.sortedKeysLength)
}
}
特征抽象任务键{
//已尝试:traitAbstractTaskKey也扩展了有序[…]
trait AbstractTaskKey{val id:Int}
//我真的想要AbstractTaskKey或(up>键是将隐式排序
放在AbstractTaskKey
的伴生对象中,以便编译器在需要填充隐式
trait AbstractTaskKeys {
trait AbstractTaskKey {val id: Int}
object AbstractTaskKey {
implicit val ord: Ordering[AbstractTaskKey] = Ordering.by(_.id)
}
val allKeys: List[AbstractTaskKey]
}
class SomeTaskKeyConsumer[TaskKeys <: AbstractTaskKeys](taskKeys: TaskKeys) {
def sortedKeysLength: Int = taskKeys.allKeys.sorted.length
}
该键将隐式排序
放入AbstractTaskKey
的伴生对象中,以便编译器在需要填充隐式时搜索该对象
trait AbstractTaskKeys {
trait AbstractTaskKey {val id: Int}
object AbstractTaskKey {
implicit val ord: Ordering[AbstractTaskKey] = Ordering.by(_.id)
}
val allKeys: List[AbstractTaskKey]
}
class SomeTaskKeyConsumer[TaskKeys <: AbstractTaskKeys](taskKeys: TaskKeys) {
def sortedKeysLength: Int = taskKeys.allKeys.sorted.length
}
implicit val ord: Ordering[AbstractTaskKeys#AbstractTaskKey] = Ordering.by(_.id)