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.

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.