zoukankan      html  css  js  c++  java
  • 大三寒假学习 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方法的机制

  • 相关阅读:
    Shell 学习笔记之函数
    Shell 学习笔记之条件语句
    Shell 学习笔记之运算符
    Shell 学习笔记之变量
    [LeetCode] Zuma Game 题解
    [LeetCode] Decode String 题解
    [LeetCode] Pacific Atlantic Water Flow 题解
    TCP的建立和终止 图解
    [LeetCode] 01 Matrix 题解
    java中protect属性用法总结
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15806717.html
Copyright © 2011-2022 走看看