第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析学习笔记
本讲主要讲解scala中的上下文界定,
本讲主要内容:
1.Context Bounds代码实战
2.Context Bounds在Spark中的广泛应用。
前面讲到视图界定:T <% V,T到V实际上存在隐式转换,
Int转换为RichInt,RichInt符合类型变量的上界。
所以在scala中推出了[T: Ordering]T是泛型,Ordering也不定是泛型类或泛型接口。
意思是存在一个隐式值Ordering[T]
class Pair_Ordering[T: Ordering](val first: T, val second: T){
def bigger(implicit ordered: Ordering[T] = {
if(ordered.compare(first, second) > 0) first else second
//bigger中有隐式值Ordering[T]
//[T: Ordering]在spark编程中应用非常广泛
}
}
object Context_Bounds {
def main(args: Array[String]){
val pair = new Pair_Ordering("Spark", "Hadoop")
println(pair.bigger)
val pairInt = new Pair_Ordering(3,5)
println(pairInt.bigger)
}
下面是ordering的源码:
trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable{
def tryCompare(x: T, y: T) = Some(Compare(x,y))
def compare(x: T, y: T):Int
}
scala难点:语法糖问题
Comparator有compare方法,实际实现时可以说明xy怎样计算。
隐式值生活在“冥界”,并以一种不可见的方式注入到方法当中
--摘自《快学scala》第21.7节。
以上内容是从王家林老师DT大数据课程第45讲的学习笔记。
DT大数据微信公众账号:DT_Spark
王家林老师QQ:1740415547
王家林老师微信号:18610086859
我的百度网盘共享的DT大数据梦工厂王家林老师第1-90讲的视频内容:http://pan.baidu.com/s/1qWK9CMo