简而言之:
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
}
}
正如你所看到的,这允许包嵌套,并为作用域和封装提供更大的控制。
包名应该是小写的,如果代码是在一个有网站的组织中开发的,那么它应该是以下格式约定的:
. 例如,如果谷歌有一个名为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一样被默认导入了。