Scala 中的链式包子句
链式包是解决包成员的成员可见性的方法。如 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
在导入文件时更改包子句的含义并缩短包子句,以便在处理包含多个不同嵌套子包的较大项目时不必编写整个包名。
让我们用一个 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
}
所以在上面的文件中而不是像下面这样写整个包子句。
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 个文件在同一个范围内,因此我们在范围内看到hrManager或techManager或员工,因此我们使用了它们,在范围内看不到其他文件。因此,对于导入多个文件,我们可以在点的末尾包含一个“_”来导入所有成员,而无需指定所有成员。从第一个示例中,对象 a 和对象 b 处于同一范围内,因此我们可以看到并使用它们。