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