zoukankan      html  css  js  c++  java
  • Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解

    王家林亲授《DT大数据梦工厂》大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
    百度云盘:http://pan.baidu.com/s/1c0noOt6
    腾讯微云:http://url.cn/TnGbdC
    360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2
    土豆:http://www.tudou.com/programs/view/pR_4sY0cJLs/
    优酷:http://v.youku.com/v_show/id_XMTI4NTE2NDI3Mg==.html?from=s1.8-1-1.2
    爱奇艺:http://www.iqiyi.com/w_19rrtik9eh.html#vfrm=2-3-0-1
    腾讯视频: http://v.qq.com/boke/page/e/0/y/e01599vk0gy.html
    技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群

    DT大数据梦工厂① :462923555
    DT大数据梦工厂②:437123764
    DT大数据梦工厂③ :418110145

    微信公众账号: DT_Spark
    王家林老师微信号: 18610086859
    王家林老师QQ: 1740415547
    王家林老师邮箱: 18610086859@126.com

    本视频由王家林老师, 亲自讲解, 完全通过代码实战把您带人大数据的时代.

    package com.parllay.scala.type_parameterizitor
    
    /**
    * Created by richard on 15-8-7.
    * 第53讲:Scala中结构类型实战详解
    */
    class Structural { def open() =print("A class instance Opened")}
    
    object Structural_Type {
    
    def main (args: Array[String]) {
    
    init(new { def open() = println("Opened")})
    
    type X = { def open():Unit }
    
    def init(res:X) = res.open
    
    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}): Unit ={
    res.open
    }
    }
    
    /**
    * 结构类型(structural type)为静态语言增加了部分动态特性,
    * 使得参数类型不再拘泥于某个已命名的类型,只要参数中包含结构中声明的方法或值即可。
    * 举例来说,java里对所有定义了close方法的抽象了一个Closable接口,
    * 然后再用Closable类型约束参数,
    * 而scala里可以不要求参数必须继承自Closable接口只需要包含close方法;如下:
    
    scala> def free( res: {def close():Unit} ) {
    res.close
    }
    
    scala> free(new { def close()=println("closed") })
    closed
    也可以通过type在定义类型时,将其声明为结构类型
    
    scala> type X = { def close():Unit }
    defined type alias X
    
    scala> def free(res:X) = res.close
    
    scala> free(new { def close()=println("closed") })
    closed
    上面传入参数时,都是传入一个实现close方法的匿名类,
    如果某个类/单例中实现了close方法,也可以直接传入
    
    scala> object A { def close() {println("A closed")} }
    
    scala> free(A)
    A closed
    
    scala> class R { def close()=print("ok") }
    
    scala> val r = new R
    
    scala> free(r)
    ok
    结构类型还可以用在稍微复杂一点的“复合类型”中,比如:
    
    scala> trait X1; trait X2;
    
    scala> def test(x: X1 with X2 { def close():Unit } ) = x.close
    上面声明test方法参数的类型为:
    
    X1 with X2 { def close():Unit }
    表示参数需要符合特质X1和X2同时也要有定义close方法
    */
    

      

  • 相关阅读:
    Representation Data in OpenCascade BRep
    Render OpenCascade Geometry Surfaces in OpenSceneGraph
    Render OpenCascade Geometry Curves in OpenSceneGraph
    OpenCascade Shape Representation in OpenSceneGraph
    Geometry Surface of OpenCascade BRep
    Geometry Curve of OpenCascade BRep
    Tyvj2017清北冬令营入学测试
    Spfa算法模板
    洛谷1016 旅行家的预算
    洛谷1290 欧几里得的游戏
  • 原文地址:https://www.cnblogs.com/czh-liyu/p/4719607.html
Copyright © 2011-2022 走看看