第74讲:从Spark源码的角度思考Scala中的模式匹配学习笔记:
Spark 的RegisterWorker源码:
case class RegisterWorker(
id:String,
host:String,
port: Int
cores:Int
memory:Int
webUiPort:Int
publicAddress: String)
extends DeployMessage {
Utils.checkHost(host, "Required hostname")
assert (port > 0)
}
实现case class最最重要的是两个方法:apply/unapply
scala在case class伴生对象中定义了这两个方法。
apply用于对象的生成。所以在代码中直接使用case class,没有new case class
unapply是为模式匹配进行内容匹配的,RegisterWorker
匹配worker发过来的worker进程启动时的注册信息
RegisterWorker在匹配时调用RegisterWorker伴生的unapply方法
如果apply是工厂模式来构建具体的RegisterWorker,
unapply是结构模式,把传进来的对象的成员结构出来,
模式匹配时会暴露所有成员
所以extractor,主要指从对象中提取出相关成员
由于要提取时手动定义unapply,所以可以对对象进行很好的控制
对外暴露时只暴露对象的结构而不暴露对象的实现,
可以做到很好的面向结构编程。
手动定义一个类在类中定义伴生对象的unapply方法可带来更大灵活性
下一讲:for中的模式匹配
以上内容是从王家林老师DT大数据课程第74讲的学习笔记。
DT大数据微信公众账号:DT_Spark
王家林老师QQ:1740415547
王家林老师微信号:18610086859
scala第74讲视频观看链接:
http://yun.baidu.com/s/1hqJByvU
我的百度网盘共享的DT大数据梦工厂王家林老师第1-74讲的视频内容:http://pan.baidu.com/s/1qWK9CMo