scala 隐式转换

来源:互联网 发布:知乎 理财平台 编辑:程序博客网 时间:2024/05/17 22:29

上下文界定

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

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}
0 0
原创粉丝点击