7.12. Metody apply i update
Metody o nazwie apply mogą być wywoływane za pomocą notacji wywołania funkcji, co polega na tym, że znak kropki oraz nazwa metody apply mogą być w wywołaniu pominięte. Klasa ApplyMethods z pliku ApplyMethods.scala definiuje szereg metod apply z różnymi listami parametrów.
Plik ApplyMethods.scala: class ApplyMethods { def apply():String = "apply()" def apply(a: Int):String = "apply(a="+a+")" def apply(n: Int, s: String):String = "apply(n="+n+", s="+s+")" def apply(str1: String, str2: String):String = "apply(str1="+str1+", str2="+str2+")" def apply(x: Int, y: Int, z: Int):String = "apply(x="+x+", y="+y+", z="+z+")" def apply(p: Symbol)(q: Symbol)(r: Symbol):String = "apply(p="+p+")(q="+q+")(r="+r+")" }
Poniższe przykłady pokazują wywołania poszczególnych metod apply przy użyciu notacji wywołania funkcji.
scala> val a = new ApplyMethods
a: ApplyMethods = ApplyMethods@63d2fe
scala> a()
res0: String = apply()
scala> a(1)
res1: String = apply(a=1)
scala> a(2,"x")
res2: String = apply(n=2, s=x)
scala> a("f","g")
res3: String = apply(str1=f, str2=g)
scala> a(3,4,5)
res4: String = apply(x=3, y=4, z=5)
scala> a('a)('b)('c)
res5: String = apply(p='a)(q='b)(r='c)
Operacja przypisania może być synonimem wywołania metody o nazwie update. Operacja postaci a(...) = b może być zamieniona na wyrażenie mające postać a.update(..., b). Po lewej stronie operatora przypisania, w nawiasach okrągłych, znajdują się wyrażenia odpowiadające wartościom wszystkich, oprócz ostatniego, parametrów metody update. Wartość ostatniego parametru umieścić należy po prawej stronie operatora przypisania. Klasa UpdateMethods z pliku UpdateMethods.scala zawiera szereg metod update z różnymi listami parametrów.
Plik UpdateMethods.scala: class UpdateMethods { def update(a: Int):String = "update(a="+a+")" def update(n: Int, s: String):String = "update(n="+n+", s="+s+")" def update(str1: String, str2: String):String = "update(str1="+str1+", str2="+str2+")" def update(x: Int, y: Int, z: Int):String = "update(x="+x+", y="+y+", z="+z+")" }
Poniższe przykłady pokazują wywołania poszczególnych metod update przy użyciu notacji odpowiadającej operacji przypisania.
scala> val u = new UpdateMethods
u: UpdateMethods = UpdateMethods@1cb4808
scala> u() = 7
res6: String = update(a=7)
scala> u(1) = "abc"
res7: String = update(n=1, s=abc)
scala> u("qqq") = "www"
res8: String = update(str1=qqq, str2=www)
scala> u(3,4) = 5
res9: String = update(x=3, y=4, z=5)
![]() | Specyfikacja języka Scala opisuje wywoływanie metod apply za pomocą notacji wywołania funkcji w punkcie 6.6, a wywoływanie metod update za pomocą notacji operacji przypisania w punkcie 6.15. |
Plik ApplyMethods.scala:
class ApplyMethods {
def apply():String = "apply()"
def apply(a: Int):String = "apply(a="+a+")"
def apply(n: Int, s: String):String = "apply(n="+n+", s="+s+")"
def apply(str1: String, str2: String):String =
"apply(str1="+str1+", str2="+str2+")"
def apply(x: Int, y: Int, z: Int):String =
"apply(x="+x+", y="+y+", z="+z+")"
def apply(p: Symbol)(q: Symbol)(r: Symbol):String =
"apply(p="+p+")(q="+q+")(r="+r+")"
}

