Scala 如何将隐式排序传递给类
我有这门课Scala 如何将隐式排序传递给类,scala,Scala,我有这门课 case class Person(name: String, age: Int)(implicit org: Ordering[Person]) 尝试实例化时失败,因为我没有正确地传递排序参数 object Person { implicit def ageOrdering(a: Person, b: Person): Int = a.age compare b.age def main(args: Array[String]): Unit = { val people = Ar
case class Person(name: String, age: Int)(implicit org: Ordering[Person])
尝试实例化时失败,因为我没有正确地传递排序参数
object Person {
implicit def ageOrdering(a: Person, b: Person): Int = a.age compare b.age
def main(args: Array[String]): Unit = {
val people = Array(Person("aa", 30), Person("bb", 32), Person("cc", 19))
Sorting.quickSort(people)
}
}
我怎么办?
谢谢作为
个人
的成员添加订购
似乎没有任何意义:为什么每个人都应该有自己的订购
此外,隐式定义返回Int
s,而不是顺序
请尝试以下方法:
case class Person(name: String, age: Int)
object Person {
implicit object AgeOrdering extends Ordering[Person] {
def compare(a: Person, b: Person): Int = a.age compare b.age
}
def main(args: Array[String]): Unit = {
val people = Array(Person("aa", 30), Person("bb", 32), Person("cc", 19))
println(people.sorted.toList)
}
}
输出:
List(Person(cc,19), Person(aa,30), Person(bb,32))
ageOrdering
属于Person,Person=>Int类型
不是Ordering[Person]
你可能想要类似于隐式valageordering:Ordering[Person]=新的Ordering[Person]{…}
但是,您可能需要重新考虑对每个人进行排序,例如,如果您想对使用该排序的人的列表进行排序,您会使用哪个人的排序?更常见的是看到函数站点def functionUsingPerson(p:Person,p1:Person)(隐式order:Ordering[Person])
使用隐式forOrdering[Person]
尝试用implicit val order:Ordering[Person]=Ordering.by{p:Person=>p.age}替换implicit
implicit
定义,它应该可以工作。