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

为什么引入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.managerspackage 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

【Scala中的链式包装子句用法指南】这3个文件在同一范围内, 因此我们看到人力资源经理or技术经理or雇员在范围内, 因此我们使用了它们, 并且在范围内看不到其他任何东西。因此, 要导入多个文件, 我们可以在点末添加" _"以导入所有成员, 而无需指定所有成员。在第一个示例中, 对象a和对象b处于同一范围内, 因此我们可以看到并使用它们。

    推荐阅读