13.5. Flagi funkcjonalności

W przypadku niektórych funkcjonalności języka Scala, próba ich użycia może skutkować błędem albo ostrzeżeniem kompilacji (w przyszłych wersjach języka te ostrzeżenia mogą zostać zamienione na błędy kompilacji). Generowanie przez kompilator takich błędów lub ostrzeżeń może być wyłączone za pomocą określonych flag, które będziemy nazywali flagami funkcjonalności. Jednym ze sposobów aktywacji flagi funkcjonalności jest zaimportowanie z obiektu scala.language wartości o nazwie takiej jak nazwa flagi. Następująca lista przedstawia flagi wraz z funkcjonalnościami, których dotyczą.

Zobaczmy dla przykładu jak za pomocą zaimportowania odpowiedniej wartości umożliwić stosowanie operatorów postfiksowych. Plik Language1.scala zawiera prosty program, w którym zastosowane jest wywołanie metody toString za pomocą operacji postfiksowej.

Plik Language1.scala:
object PostfixOpsTest extends App {
  println(123 toString)
}

Próba kompilacji tego pliku skutkuje pojawieniem się ostrzeżenia.

$ scalac Language1.scala
warning: there was one feature warning; re-run with -feature for details
one warning found

$

Kompilator sugeruje ponowną kompilację z użyciem opcji -feature. Jej zastosowanie pokazuje dodatkowe informacje.

$ scalac -feature Language1.scala
Language1.scala:2: warning: postfix operator toString should be enabled
by making the implicit value scala.language.postfixOps visible.
This can be achieved by adding the import clause 'import scala.language.postfixOps'
or by setting the compiler option -language:postfixOps.
See the Scala docs for value scala.language.postfixOps for a discussion
why the feature should be explicitly enabled.
  println(123 toString)
              ^
one warning found

Kompilator informuje nas w swoim komunikacie, że powinniśmy umożliwić stosowanie operatora postfiksowego toString. Informuje również, że można tego dokonać dodając odpowiednią klauzulę importu albo używając opcji kompilatora.

Plik Language2.scala:
object PostfixOpsTest extends App {
  import language.postfixOps
  println(123 toString)
}

Plik Language1.scala zawiera poprawioną definicję klasy PosfixOpsTest. Definicja została uzupełniona o klauzulę importu. Kompilacja tego pliku nie pokazuje żadnego ostrzeżenia.

$ scalac Language2.scala

$

Innym — obok klauzul importu — sposobem umożliwiania używania opisanych wyżej funkcjonalności jest zastosowanie opcji -language kompilatora, którą uzupełnia się dwukropkiem i nazwą flagi. Zamiast nazwy flagi można również użyć znaku podkreślenia, co jest odpowiednikiem użycia klauzuli import language._. Następujący przykład pokazuje kompilację pliku Language1.scala z użyciem odpowiedniej opcji kompilatora zapobiegającej pojawieniu się ostrzeżenia kompilacji.

$ scalac -language:postfixOps Language1.scala

$

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.