• 大三寒假学习 spark学习 Scala面向对编程 对象(apply方法与update方法)


    Apply方法:

      

    • Scala自动调用Array类的伴生对象Array中的一个称为apply的方法,来创建一个Array对象myStrArr。
    • apply方法调用约定:用括号传递给类实例或单例对象名一个或多个参数时,Scala 会在相应的类或对象中查找方法名为apply且参数列表与传入的参数一致的方法,并用传入的参数来调用该apply方法。

      下面为代码示例

    class TestApplyclass {
        def apply(param: String): String ={
            println("apply method called,parameter is:" +param)
         "Hello wor1d !" } } val myobject = new TestApplyclass println(myobject( "param1"))

    在单例对象中定义apply方法:

    object TestApplysingleobject {
        def apply(param1:String,param2: String): String = {
            println( "apply method called")
            param1 +" and " + param2
        }
    }
    val group =TestApplysingleobject("Zhangfei", "Liubei")
    println(group)

    可以看出,在执行TestApplySingleObject("Zhangfei" , "Liubei")时调用了apply方法,并且把“Zhangfei and Liubei”作为返回值,赋值给group变量,因此,println(group)语句会打印出“Zhangfei and Liubei"

     伴生类和伴生对象中的apply:

    class TestApplyClassAndObject {}
    class ApplyTest{
        def apply() = println("apply method in class is called! ")
        def greetingofclass: Unit ={
            println("Greeting method in class is called.")
        }
    }
    object ApplyTest{
        def apply()={
            println("apply method in object is called")
            new ApplyTest()
        }
    }
    object TestApplyClassAndObject{
        def main (args: Array [String]){
            val a= ApplyTest()//这里会调用伴生对象中的apply方法
            a.greetingofclass
            a()//这里会词用伴生类中的apply方法
        }
    }

      从上面代码可以看出,当我们执行val a = ApplyTest(0时,会导致apply方法的调用并返回该方法调用的值,也就是ApplyTest的实例化对象。当执行a()时,又会导致调用伴生类的apply方法,如果我们愿意,就可以在伴生类的apply方法中写入一些处理逻辑,这样就可以把传入的参数赋值给实例化对象的变量

    update方法:

      当对带有括号并包括一到若干参数的对象进行赋值时,编译器将调用对象的update方法,在调用时,是把括号里的参数和等号右边的对象一起作为update方法的输入参数来执行调用

      

      从上面可以看出,在进行元组赋值的时候,之所以没有采用Java中的方括号myStrArr[O]而是采用圆括号的形式,myStrArr(O),是因为存在上述的update方法的机制

  • 相关阅读:
    二分使用条件 + 代码模板
    Codeforces Round #710 (Div. 3) Editorial 1506A
    Cf #709 Div. 2 B. Restore Modulo 一个只有三千多人过的b题, 妙啊!
    牛客网 第十八届浙大城市学院程序设计竞赛(同步赛)J--万万没想到 啦啦啦啦啦
    Codeforces Round #707 (Div. 2)A.英语漏洞 + C.Going Home C题收获不小
    Codeforces Round #706 (Div. 2)B. Max and Mex __ 思维, 模拟
    Codeforces Round #705 (Div. 2) B. Planet Lapituletti(镜像时钟) 思维
    位运算
    Edu Cf Round 105 (Div. 2) B. Berland Crossword 1.读懂题, 2. 思维
    Codeforces Round #703 (Div. 2)__ B. Eastern Exhibition__ 纯纯的思维
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15806717.html
Copyright © 2020-2023  润新知