Scala import(附import与package官方文档自翻译)

简而言之:

import users.User 导入User类

import users._    导入包中所有的类

import users.{User, UserPreferences}    导入包中这两个类

import users.{User => UserInfo, UserPreferences => UserPref}    导入类并重命名,为避免命名空间冲突重命名了这个类,

下边需要用到这个类的时候,需要使用新的类名UserInfo和UserPref。

附:

关于Scala的Packages和Imports的官方文档的(自翻译)版:

Packages and imports(包和导入

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

Creating a package(创建一个包)

    包是通过在Scala文件顶部的一个或多个包名来创建的。

package users
class User

一种惯例是将包命名为与包含Scala文件的目录相同的名称。然而,Scala是不可知的文件布局。一个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
  }
}

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

    包名应该是小写的,如果代码是在一个有网站的组织中开发的,那么它应该是以下格式约定的:<top-level-domain>.<domain-name>.<project-name>. 例如,如果谷歌有一个名为SelfDrivingCar的项目,那么包名将如下所示:

package com.google.selfdrivingcar.camera
class Lens

    这可以对应于以下目录结构:

SelfDrivingCar/src/main/scala/com/google/selfdrivingcar/camera/Lens.scala.

Imports(导入)

    import子句用于访问其他包中的成员(类、特征、函数等)。访问相同包的成员不需要一条import子句。import子句是有选择性的:

import users._  // 导入users包中所有
import users.User  // 导入User类
import users.{User, UserPreferences}  // 只导入选中的成员
import users.{UserPreferences => UPrefs}  // 为了方便,导入并重命名

    Scala与Java的一点不同之处在于,import可以在任何地方使用。

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

    在发生命名冲突的情况下,您需要从项目的根目录导入一些东西,在包名前面加上前缀 _root_ :

package accounts
import _root_.users._

    注意:scala和java.lang包就像object Predef一样被默认导入了。