在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 中,imports 是词法范围的。imported 标识符仅在它们被编辑的范围内可见import。
在第一种情况下,范围是文件,因此,imports 将在整个文件中可见,但在其他文件中不可见。在第二种情况下,范围是类,因此imports 将在整个类中可见,但在同一文件中的其他类中不可见(当然嵌套在 中的类除外MyClass)。
您还可以将范围限制为import单个方法甚至单个块(!)
class Foo {
def bar {
// do something
{
import baz.quux.Frotz
// use Frotz
}
// Frotz not visible here
}
}
这是 Scala 规律性、正交性和简单性的一个很好的例子。例如,在 Java 中,块为局部变量创建作用域,但不为imports(或方法或其他任何东西)创建作用域。在 Scala 中,块创建范围。时期。没有例外,没有极端情况。
位于import花括号之间,因此它仅在花括号之间可见。它只是做你所期望的。
区别在于:
在Option 1导入是可行的完整范围。即任何类/特征/函数com.somePackage都可以在内部/外部的任何地方使用MyClass
但是如果Option 2它只能在内部使用,MyClass而不能在外部使用,因为范围import仅限于内部MyClass。