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
Plik Namespaces1.scala:
class B {
var b = 1
def b = 2
}
