【问题标题】:Scala import statement at top and inside scala classScala 类顶部和内部的 Scala 导入语句
【发布时间】:2013-06-11 07:27:41
【问题描述】:

在scala中这两种导入策略有什么区别

选项 1

import com.somepackage

class MyClass {
  //further code
}

选项 2

class MyClass {
  import com.somepackage
  //further code
}

【问题讨论】:

  • com.sompackage的作用域不同!

标签: scala


【解决方案1】:

在 Scala 中,imports 是词法范围的。 imported 标识符仅在 imported 所在的范围内可见。

在第一种情况下,范围是文件,因此imports 将在整个文件中可见,但在其他文件中不可见。在第二种情况下,范围是类,因此imports 将在整个类中可见,但在同一文件中的其他类中不可见甚至(当然嵌套在@987654326 中的类除外@)。

您还可以将import 的范围限制为单个方法甚至单个块(!)

class Foo {
  def bar {
    // do something
    {
      import baz.quux.Frotz
      // use Frotz
    }
    // Frotz not visible here
  }
}

这是 Scala 规律性、正交性和简单性的一个很好的例子。例如。在 Java 中,块为局部变量创建作用域,但不为 imports(或方法或其他任何东西)创建作用域。在 Scala 中,块创建范围。时期。没有例外,没有极端情况。

import 位于花括号之间,因此它仅在花括号之间可见。它只是按照您的预期进行。

【讨论】:

    【解决方案2】:

    区别在于:

    Option 1 中,导入对于整个范围都是可行的。即com.somePackage 中的任何类/特征/函数都可以在MyClass 内部/外部的任何地方使用

    但在Option 2 的情况下,它只能在MyClass 内部使用,而不能在其外部使用,因为import 的范围仅限于MyClass 内部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-01
      • 2017-01-25
      • 2017-05-15
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      相关资源
      最近更新 更多