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
- scala-隐式转换
- scala 隐式转换
- Scala隐式转换
- Scala隐式转换
- scala隐式转换
- scala隐式转换
- scala 隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- Scala--隐式转换
- scala implicit 隐式转换
- scala implicit隐式转换
- Scala隐式转换实战
- Scala implicit隐式转换
- scala 隐式转换参数
- Scala之隐式转换
- Android多线程编程之一:Thread+Handler
- 图像分割
- SwiftDemo
- 函数实现my_memcpy.
- 事务的隔离级别
- scala 隐式转换
- MFC CTreeCtrl节点存储额外数据
- Android多线程编程之二:Thread+UI.Post(new Runnable(){})
- matlab 图像分割
- 函数实现my_memcmp
- C++指针详解/理解c和c++的复杂类型声明
- SharedPreferences 文件 保存失败
- hdoj3790_最短路径问题(最短路径)
- requestWindowFeature使用