Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 独立于外部类实例为内部类定义有序实例_Scala_Inner Classes_Traits - Fatal编程技术网

Scala 独立于外部类实例为内部类定义有序实例

Scala 独立于外部类实例为内部类定义有序实例,scala,inner-classes,traits,Scala,Inner Classes,Traits,我试图指定所有AbstractTaskKey都是有序的,无论它们属于哪个AbstractTaskKey容器 如下面的代码所示,很容易为每个特定的外部类指定一个顺序,但这意味着在每个不同的地方,我希望对需要使用sortBy的所有键进行排序(或者定义一个专门用于范围内的任何子外部类的隐式ord) 我希望能够为AbstractTaskKey定义一个适用于AbstractTaskKey所有子类的有序实例 正如其他SO帖子所建议的那样,我尝试在一堆不同的地方添加不同的方差注释、子类和通配符,但没有效果 如

我试图指定所有AbstractTaskKey都是有序的,无论它们属于哪个AbstractTaskKey容器

如下面的代码所示,很容易为每个特定的外部类指定一个顺序,但这意味着在每个不同的地方,我希望对需要使用sortBy的所有键进行排序(或者定义一个专门用于范围内的任何子外部类的隐式ord)

我希望能够为AbstractTaskKey定义一个适用于AbstractTaskKey所有子类的有序实例

正如其他SO帖子所建议的那样,我尝试在一堆不同的地方添加不同的方差注释、子类和通配符,但没有效果

如何使AbstractTaskKey的已排序实例(或排序)通用

对象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)