1. 程式人生 > 其它 >大三寒假學習 spark學習 Scala面向對程式設計 物件(apply方法與update方法)

大三寒假學習 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方法的機制