11.7. Przekształcanie parametrów przekazywanych przez nazwę w funkcje

Wartość parametru przekazanego przez nazwę można, podobnie jak metodę, zamienić na funkcję, poprzez dodanie do niej znaku podkreślenia. Plik MakeFunction.scala zawiera definicję metody, która zamienia przekazany jej argument na funkcję i zwraca tę funkcję jako rezultat.

Plik MakeFunction.scala:
def makeFunction[T](param: => T) = param _

Poniższy przykład pokazuje jak można wykorzystać tę metodę do utworzenia funkcji. Utworzoną funkcję można wywołać za pomocą pary nawiasów okrągłych.

scala> :load MakeFunction.scala
Loading MakeFunction.scala...
makeFunction: [T](param: => T)() => T

scala> val f = makeFunction(println("Hello!!!!"))
f: () => Unit = <function0>

scala> f()
Hello!!!!

Kolejny przykład pokazuje funkcję, która „pamięta” kontekst, w którym została utworzona. Funkcja g zwraca wartość zmiennej a, pomnożoną przez 2. Po zmianie wartości zmiennej a, zmienia się także rezultat zwracany przez funkcję g.

scala> var a = 5
a: Int = 5

scala> val g = makeFunction(2*a)
g: () => Int = <function0>

scala> g()
res1: Int = 10

scala> a = 7
a: Int = 7

scala> g()
res2: Int = 14

Specyfikacja języka Scala opisuje zamianę parametrów przekazanych przez nazwę na funkcje w punkcie 6.7.

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.