在scala中,这两种导入策略有什么区别
选项1
import com.somepackage
class MyClass {
//further code
}
Run Code Online (Sandbox Code Playgroud)
选项2
class MyClass {
import com.somepackage
//further code
}
Run Code Online (Sandbox Code Playgroud)
Jör*_*tag 18
在Scala中,imports是词法范围的.imported标识符仅在其import编入的范围内可见.
在第一种情况下,范围是文件,因此,imports将在整个文件中可见,但在其他文件中不可见.在第二种情况下,范围是类,因此imports将在整个类中可见,但在其他类中甚至不在同一文件中(嵌套在其中的课程类除外MyClass).
您也可以将importjust 的范围限制为单个方法甚至单个块(!)
class Foo {
def bar {
// do something
{
import baz.quux.Frotz
// use Frotz
}
// Frotz not visible here
}
}
Run Code Online (Sandbox Code Playgroud)
这是Scala规则性,正交性和简单性的一个很好的例子.例如,在Java中,块为局部变量创建范围,但不为imports(或方法或其他任何东西)创建范围.在Scala中,块创建范围.期.没有例外,没有角落案例.
它import位于花括号之间,只有在花括号之间才可见.它只是做你期望的.
Jat*_*tin 11
不同之处是:
在Option 1导入是可行的完整范围.即任何类/特征/功能都com.somePackage可以在任何内部/外部使用MyClass
但是在Option 2它的情况下它只能在内部MyClass而不是外部使用,因为范围import仅限于内部MyClass.
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |