您的位置:首页 > 其它

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala 下界