解决包成员的可见性的方法。如Martin Odersky所述, 它是在Scala 2.8中引入的。假设我们有如下代码。
让我们打破代码, 了解这里发生的情况。
package x.z
object a {
b //object b
}
object b{
a //object a
}
或者我们可以如下编写上面的代码
// but this is not a good and short way of writing package clauses
// let's just stick to the first style.
package x{
package z{
object a {
}
object b{
}
}
}
在这里, 对象a和b在目录x中的目录z中定义。包z的可见性是成员a和b, 而不是成员x。而且我们也可以像下面的不同scala文件中那样编写这些对象。
// a.scala
package x.z
object a {
b //object b still visible
}
// b.scala
package x.z
object b{
a // object a still visible
}
// files would created like this
+x
+z
+a.scala
+b.scala
为什么引入package子句的链接?
在导入文件时更改package子句的含义并缩短package子句, 这样在处理包含多个不同嵌套子包的较大项目时, 我们不必写整个包名。
让我们仅以eg的目录结构类似的方式来理解它:
+company
+ceo
+Ceo.scala
+directors
+Director.scala
+managers
+hrManager.scala
+techManager.scala
+employees
+employee.scala
// employee.scala
package company.ceo.directors.managers
package employees{
object employee extends Enumeration{
val employee1= Value
val employee2= Value
val employee3= Value
}
}
// hrManager.scala
package company.ceo.directors.managers
//short form to import employee3
import employees.employee.employee3
object hrManager extends Enumeration{
val hR1, hR2 = Value
val hrAssociate= employee3
}
// techManager.scala
package company.ceo.directors.managers
// short form to import employee1
import employees.employee.employee1
object techManager extends Enumeration{
val tmanager= Value
val techAssociate=employee1
// directly specifying employee2
val Assistant= employees.employee.employee2
val x=Director
}
因此, 在上面的文件中, 而不是像下面那样编写整个package子句。
import company.ceo.directors.managers.employees.employee.employee1 //techManager.scala import company.ceo.directors.managers.employees.employee.employee2 //techManager.scala import company.ceo.directors.managers.employees.employee .employee3 //hrManager.scala
我们写了与当前导入目录相同的目录名称
+hrManager.scala //file
+techManager.scala //file
+employees //directory
这3个文件在同一范围内, 因此我们看到人力资源经理or技术经理or雇员在范围内, 因此我们使用了它们, 并且在范围内看不到其他任何东西。因此, 要导入多个文件, 我们可以在点末添加" _"以导入所有成员, 而无需指定所有成员。在第一个示例中, 对象a和对象b处于同一范围内, 因此我们可以看到并使用它们。