Scala 游览

包和导入

语言

包和导入

Scala 使用包来创建命名空间,允许你对程序进行模块化。

创建包

通过在 Scala 文件顶部声明一个或多个包名称来创建包。

package users

class User

一种约定是将包命名为与包含 Scala 文件的目录相同的名称。但是,Scala 与文件布局无关。package users 的 sbt 项目的目录结构可能如下所示

- ExampleProject
  - build.sbt
  - project
  - src
    - main
      - scala
        - users
          User.scala
          UserProfile.scala
          UserPreferences.scala
    - test

注意 users 目录如何位于 scala 目录中,以及包中如何有多个 Scala 文件。包中的每个 Scala 文件都可以具有相同的包声明。声明包的另一种方法是将它们相互嵌套

package users {
  package administrators {
    class NormalUser
  }
  package normalusers {
    class NormalUser
  }
}
package users:
  package administrators:
    class NormalUser

  package normalusers:
    class NormalUser

如你所见,这允许包嵌套,并为作用域和封装提供了更大的控制。

包名应全部小写,如果代码是在有网站的组织内开发的,则应采用以下格式约定:<top-level-domain>.<domain-name>.<project-name>。例如,如果 Google 有一个名为 SelfDrivingCar 的项目,则包名将如下所示

package com.google.selfdrivingcar.camera

class Lens

这可能对应于以下目录结构:SelfDrivingCar/src/main/scala/com/google/selfdrivingcar/camera/Lens.scala

导入

import 子句用于访问其他包中的成员(类、特征、函数等)。对于访问同一包中的成员,不需要 import 子句。导入子句是可选的

import users._  // import everything from the users package
import users.User  // import the class User
import users.{User, UserPreferences}  // Only imports selected members
import users.{UserPreferences => UPrefs}  // import and rename for convenience
import users.*  // import everything from the users package except given
import users.given // import all given from the users package
import users.User  // import the class User
import users.{User, UserPreferences}  // Only imports selected members
import users.UserPreferences as UPrefs  // import and rename for convenience

Scala 与 Java 不同的一点是,导入可以在任何地方使用

def sqrtplus1(x: Int) = {
  import scala.math.sqrt
  sqrt(x) + 1.0
}
def sqrtplus1(x: Int) =
  import scala.math.sqrt
  sqrt(x) + 1.0

在出现命名冲突,并且需要从项目的根目录导入内容时,请使用 _root_ 为包名称添加前缀

package accounts

import _root_.users._
package accounts

import _root_.users.*

注意:scalajava.lang 包以及 object Predef 默认导入。

此页面的贡献者