W Scala, import
s są leksykalne. import
identyfikatory ed są widoczne tylko w zakresie były import
ed w.
W pierwszym przypadku, zakres jest plikiem, więc import
s będą widoczne w całym pliku, ale nie w innych plikach. W drugim przypadku zasięgiem jest klasa, tak więcs będzie widoczne w całej klasie, ale nie w innych klasach nawet w tym samym pliku (z wyjątkiem klas oczywiście zagnieżdżonych w ramach MyClass
).
Można także ograniczyć zakres w import
tylko do jednej metody jeszcze jeden blok (!)
class Foo {
def bar {
// do something
{
import baz.quux.Frotz
// use Frotz
}
// Frotz not visible here
}
}
To jest dobry przykład Scala regularności, ortogonalności i prostoty. Na przykład. w Javie bloki tworzą zakresy dla zmiennych lokalnych, ale nie dla import
s (lub metod lub czegokolwiek innego). W Scali bloki tworzą zakresy. Kropka. Bez wyjątków, bez skrzynek narożnych.
import
znajduje się pomiędzy nawiasami klamrowymi, ergo jest widoczna tylko między nawiasami klamrowymi. Po prostu robi to, czego się spodziewasz.
Zakres 'com.sompackage' jest inny! – Shrey