Scala 如何进行嵌套导入
我正在尝试清理我的用户api,这样用户就可以整洁地从单个包对象导入,并获取其中的所有内容。我意识到我可以将我的包移动到最上面的包中,但我想知道是否有办法做到以下几点(我知道这可能不是最佳做法): 我有以下套餐:Scala 如何进行嵌套导入,scala,object,import,package,library-design,Scala,Object,Import,Package,Library Design,我正在尝试清理我的用户api,这样用户就可以整洁地从单个包对象导入,并获取其中的所有内容。我意识到我可以将我的包移动到最上面的包中,但我想知道是否有办法做到以下几点(我知道这可能不是最佳做法): 我有以下套餐: package org.Me.packages.packageA case class A() { // some implementation } package org.Me.packages.packageB case class B() { // some implemen
package org.Me.packages.packageA
case class A() {
// some implementation
}
package org.Me.packages.packageB
case class B() {
// some implementation
}
现在,这需要导入以下格式:
import org.Me.packages.packageA.A
import org.Me.packages.packageB.B
我被要求做的是:
package org.Me.combinedPackages
package object Combined {
import org.Me.packages.packageA.A
import org.Me.packages.packageB.B
}
因此,我的最终用户只需执行以下操作:
import org.Me.combinedPackages._
// access both a and b here
从我所读到的,我理解它意味着嵌套导入是不可能的
那么,我试图做的事情是不可能的吗?我意识到还有其他方法。在Dotty中,您可以通过(双到
导入
):
但是,在Scala 2中,您必须:
- 对要“传递”的每个类型使用类型别名,以使其可以从包中访问
- 对于要通过包重定向的每个(伴随)对象,使用
val
以防万一,我要提到的是,对于例如宏注释,这会中断,因为如果在宏注释类型中有这样的别名,编译器将不会识别出它应该使用原始类型的宏扩展来处理它。这不是可传递的,只是通配符导入。没有这种可传递的导入。谢谢,我修复了标题
package org.Me.combinedPackages
export org.Me.packages.packageA.A
export org.Me.packages.packageB.B
package my.package
// imported as my.package.exported._
package object exported {
type NormalType = some.other.package.NormalType
val NormalType: some.other.package.NormalType.type =
some.other.package.NormalType
type ParametricType[F[_], A] = some.other.package.ParametricType[F, A]
val ParametricType: some.other.package.ParametricType.type =
some.other.package.ParametricType
// be careful to not import things that are automatically imported
// e.g. implicits in companions, and avoid importing the same implicit
// twice from two different packages
implicit val redirectedImplicit: some.other.package.SomeImplicit =
some.other.package.SomeImplicit
}