2013-06-10 16 views

Odpowiedz

11

różnica wynosi:

In Option 1 import jest wykonalny dla pełnego zakresu. tj każda klasa/cecha/funkcja w com.somePackage może być używany w dowolnym miejscu wewnątrz/na zewnątrz MyClass

Jednak w przypadku Option 2 może być stosowany tylko wewnątrz MyClass a nie poza nią, ponieważ zakres import ogranicza się tylko wewnątrz MyClass.

15

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.