5.3. Przestrzenie nazw

W Scali istnieją dwie przestrzenie nazw. Jedna dla typów, a druga dla wartości. Nazwy zmiennych, wartości niezmiennych i metod należą do tej samej przestrzeni nazw. Oznacza to na przykład, że nie można w jednej klasie zdefiniować zmiennej i metody mających tę samą nazwę.

Plik Namespaces1.scala:
class B {
  var b = 1
  def b = 2
}

Klasa zdefiniowana w pliku Namespaces1.scala nie kompiluje się z tego powodu.

$ scalac Namespaces1.scala
Namespaces1.scala:3: error: method b is defined twice
  conflicting symbols both originated in file 'H:\jps2\examples\Namespaces1.scala'
  def b = 2
      ^
one error found

Klasa zdefiniowana w pliku Namespaces2.scala kompiluje się, mimo że posiada dwie składowe mające taką samą nazwę. Jednak jedna z tych nazw dotyczy typu, a druga dotyczy wartości, co jest dozwolone.

Plik Namespaces2.scala:
class A {
  type a = String
  def a: a = "a" 
}

W definicji metody z wiersza , pierwsza litera a oznacza nazwę metody, a druga (po dwukropku) oznacza typ rezultatu tej metody.

scala> val a = new A
a: A = A@39680d

scala> a.a
res0: a.a = a

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.