第53讲:Scala中结构类型实战详解学习笔记
本讲讲结构类型
在其他语言中也有javasctipt、ruby
动态语言中有一种知名的鸭子类型:如果看起来像鸭子,走起来像鸭子叫起来也像鸭子的话,我们就认为是鸭子。
结构类型是指一组关于抽象的方法或字段或类型的规格的说明,
这种抽象的方法或字段或类型是我们传进参数或使用相关的对象必须具备的。
举例:
class Structural { def open()=print("A class instance Opened")}
object Structural_Type {
def main(args: Array[String]){
init( new { def open()=println("Opened")}) //匿名对象中有个open方法。
type X = {def open():Unit} //type是把等号后的命名为别名,要想使用open,可以直接使用X,X里有open
//如果路径长或表达复杂类时可以用type的方式。
//C语言的结构体也可以将结构体命名成别名。
def init(res:X) = res.open //这里的init是局部的本地方法
init(new {def open()=println("Opened again")})
object A {def open() {println("A single object Opened")}}
init(A)
val structural = new Structural
init(structural)
}
def init(res: {def open():}Unit){
//init方法要求传进的对象中有一个open方法,只要传进的对象中有open方法,就可以传进来。而不关心其类型。
//这个特性类似动态语言的特性。
res.open
}
}
在构建复杂的表达式又不想从类或接口的角度去限制,就可以使用结构方法。
含有动态语言的灵活性和简洁性,在spark中很少使用,但从对语言的感知的角度非常有用。
scala中的结构类型=动态语言中的鸭子类型
以上内容是从王家林老师DT大数据课程第53讲的学习笔记。
DT大数据微信公众账号:DT_Spark
王家林老师QQ:1740415547
王家林老师微信号:18610086859
百度网盘共享的DT大数据梦工厂王家林老师第1-91讲的视频内容:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group
第53讲爱奇艺视频网址:http://www.iqiyi.com/w_19rrtik9eh.html