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. |
Plik MakeFunction.scala:
def makeFunction[T](param: => T) = param _

