scala 隐式转换

上下文界定

比如:比较任意两个对象的大小

1.基于scala已定义类型的泛型的上下文界定
必须显示 指明 T具有 T=> Ordered[T] 特征,
example1:

def smaller[T](a:T, b:T)(implicit order:T=> Ordered[T]) = if(a < b) a else b

scala>smaller(1,2)
1

2.基于自定义类型的泛型的上下文界定

让自定义类型具有这样的能力  T:Ordering => Ordering[T]

步骤1:自定义类型定义
如:

class Word(val length: Int) {
  override def toString = "" + length
}

步骤2:继承Ordering类型
example1:

trait WordOrdering extends Ordering[Word] {
  override def compare(x: Word, y: Word) = {
    if (x.length < y.length) -1
    else if (x.length == y.length) 0
    else 1
  }
}

步骤3: 指明对象的隐式转换
告诉编译器,哪个对象需要隐式转换,并且隐式转化后的对象是哪个
如:

    implicit object Word extends WordOrdering

步骤4: 实现方法
如:

class Pair[T: Ordering](val first: T, val second: T) {
  // 方法一
  // def smaller(implicit order:Ordering[T])=
  // if(order.compare(first, second)<0) first else second

  //方法二
  // def smaller= 
  // if(implicitly[Ordering[T]].compare(first, second)<0) first else second

  //方法三
  import Ordered._
  def smaller = if (first < second) first else second

}

你可能感兴趣的:(scala,隐式转化,上下文界定)