20.2. Modyfikator implicit w funkcjach anonimowych

Pojedynczy nazwany parametr funkcji anonimowej, nieujęty w nawiasy, można poprzedzić modyfikatorem implicit. W takim przypadku jednak tego parametru nie traktuje się tak, jak przekazywanej niejawnie listy parametrów. W przypadku wywołania takiej funkcji, argument należy jej przekazać jawnie. Poniższa definicja tworzy i przypisuje do wartości callGreetingPeter funkcję anonimową, mającą jeden parametr o nazwie gw. Funkcja służy do wywołania metody greeting z pliku ImplicitParameters1.scala.

scala> :load ImplicitParameters1.scala
Loading ImplicitParameters1.scala...
greeting: (name: String)(implicit greetWord: String)String

scala> val callGreetingPeter:(String) => String =
     |   implicit gw => greeting("Peter")
callGreetingPeter: String => String = <function1>

Dzięki temu, że parametr gw funkcji callGreetingPeter ma modyfikator implicit, wywołanie metody greeting wewnątrz tej funkcji jest prawidłowe, mimo tylko jednej jawnie podanej listy argumentów.

scala> callGreetingPeter("Hi")
res0: String = Hi Peter!

Natomiast pominięcie listy argumentów nie powoduje wywołania funkcji, a jedynie odwołanie się do samej wartości callGreetingPeter.

scala> implicit val h = "Hello"
h: String = Hello

scala> callGreetingPeter
res1: String => String = <function1>

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.