В scala какая разница между этими двумя стратегиями импорта
Вариант 1
import com.somepackage
class MyClass {
//further code
}
Вариант 2
class MyClass {
import com.somepackage
//further code
}
В scala какая разница между этими двумя стратегиями импорта
Вариант 1
import com.somepackage
class MyClass {
//further code
}
Вариант 2
class MyClass {
import com.somepackage
//further code
}
В Scala, import
лексически ограничены. Идентификаторы import
ed видны только в области, в которой они были import
ed.
В первом случае область - это файл, поэтому import
будет отображаться во всем файле, но не в других файлах. Во втором случае область видимости - это класс, поэтому import
будет отображаться во всем классе, но не в других классах даже в одном файле (кроме классов курса, вложенных в MyClass
).
Вы также можете ограничить область import
только одним методом даже одним блоком (!)
class Foo {
def bar {
// do something
{
import baz.quux.Frotz
// use Frotz
}
// Frotz not visible here
}
}
Это хороший пример Scala регулярности, ортогональности и простоты. Например. в Java блоки создают области для локальных переменных, но не для import
(или методов или чего-либо еще). В Scala блоки создают области. Период. Никаких исключений, никаких угловых случаев.
import
находится между фигурными фигурными скобками, ergo видна только между фигурными фигурными скобками. Он просто делает то, что вы ожидаете.
Разница заключается в следующем:
В Option 1
импорт является жизнеспособным для полной области. т.е. любой класс/признак/функция в com.somePackage
можно использовать где угодно внутри/вне MyClass
Но в случае Option 2
он может использоваться только внутри MyClass
, а не вне его, потому что область действия import
ограничена только внутри MyClass
.