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