scala-上界
2014-11-08 17:59
120 查看
上界符号 <:
对应的下界符号 >:
举例说明:
定义MyPerson类,对MyPerson类进行排序
class MyPerson(val firstName : String, val lastName : String)
extends Ordered[MyPerson] {
//混入特质Ordered,并实现compare
def compare(that : MyPerson) = {
val lastNameComp = lastName.compareToIgnoreCase(that.lastName )
//先比较lastName,再比较firstName
if (lastNameComp != 0)
lastNameComp
else
firstName.compareToIgnoreCase(that.firstName )
}
override def toString = firstName + " " + lastName
}
//merge Sort
def orderedMergeSort[T <: Ordered[T]](xs : List[T]) : List[T] = {
//递归merge排序
def merge(xs : List[T], ys : List[T]) : List[T] =
(xs, ys) match {
case (Nil, _) => ys
case (_, Nil) => xs
case (x :: xsl, y :: ysl) =>
if (x < y) x :: merge(xsl, ys)
else y :: merge(xs, ysl)
}
val n = xs.length / 2
if (n == 0) xs
else {
val (ys, zs) = xs splitAt n
merge(orderedMergeSort(ys), orderedMergeSort(zs))
}
}
T <: Ordered[T]表示T需要有一个Ordered[T]的超类,例如String有一个Ordered[String]的超类,MyPerson有一个Ordered[MyPerson]的超类(因为MyPerson扩展了Ordered)。
但是请注意,Int没有Ordered[Int]的超类。
val people = List(new Person("larry", "wall"), new Person("tony", "stark"), new Person("alan", "kay"))
val sortedPeople = orderedMergeSort(people)
对应的下界符号 >:
举例说明:
定义MyPerson类,对MyPerson类进行排序
class MyPerson(val firstName : String, val lastName : String)
extends Ordered[MyPerson] {
//混入特质Ordered,并实现compare
def compare(that : MyPerson) = {
val lastNameComp = lastName.compareToIgnoreCase(that.lastName )
//先比较lastName,再比较firstName
if (lastNameComp != 0)
lastNameComp
else
firstName.compareToIgnoreCase(that.firstName )
}
override def toString = firstName + " " + lastName
}
//merge Sort
def orderedMergeSort[T <: Ordered[T]](xs : List[T]) : List[T] = {
//递归merge排序
def merge(xs : List[T], ys : List[T]) : List[T] =
(xs, ys) match {
case (Nil, _) => ys
case (_, Nil) => xs
case (x :: xsl, y :: ysl) =>
if (x < y) x :: merge(xsl, ys)
else y :: merge(xs, ysl)
}
val n = xs.length / 2
if (n == 0) xs
else {
val (ys, zs) = xs splitAt n
merge(orderedMergeSort(ys), orderedMergeSort(zs))
}
}
T <: Ordered[T]表示T需要有一个Ordered[T]的超类,例如String有一个Ordered[String]的超类,MyPerson有一个Ordered[MyPerson]的超类(因为MyPerson扩展了Ordered)。
但是请注意,Int没有Ordered[Int]的超类。
val people = List(new Person("larry", "wall"), new Person("tony", "stark"), new Person("alan", "kay"))
val sortedPeople = orderedMergeSort(people)
相关文章推荐
- (转)Scala中协变(+)、逆变(-)、上界(<:)、下界(>:)简单介绍
- Scala学习笔记--上界(<:)、视图界定(<%)、上下文界定(T:M)
- scala的协变逆变,上界下界
- Scala的协变covariant(+),逆变contravariant(-),上界(<:),下界(>:)
- Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- scala-协变、逆变、上界、下界
- scala的协变与逆变、上界与下界
- Scala中的协变,逆变,上界,下界等
- Scala之上界
- Scala泛型、隐式转换和隐式参数、视图介绍、Scala中的上界、下界、结合柯里化进行隐式转换
- 一步步学spark之一scala高级特性中Lower bounds(下界)与Upper bounds(上界),View bounds(视图边界)3.7
- Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- Programming In Scala笔记-第十九章、类型参数,协变逆变,上界下界
- Scala List中的上界下界以及逆变、协变
- Scala中的协变,逆变,非变,上界,下界
- Scala学习之路 (九)Scala的上界和下届
- scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- Scala进阶27-List中的上界、下界、逆变、协变
- Scala中的协变,逆变,上界,下界等
- scala-协变、逆变、上界、下界