9

我有一些 Scala 类和对象,在它们自己的包中。每个包都有一个包对象定义一些隐式,例如从包中import com.foo.bar._导入所有隐式和类bar

我想知道的是,有没有办法定义一个“伞”进口,比如说com.foo.all,这样

import com.foo.all._

相当于

import com.foo.bar._
import com.foo.baz._
import com.foo.qux._
...

我可以理解这可能有点不清楚,但是如果我们考虑我自己有大量包的情况,这显然会更简洁。

4

4 回答 4

12

我能想到的最短形式是:

import com.foo._, bar._, baz._, qux._

例如:

import scala.collection.mutable._, PriorityQueue._, ArrayBuffer._

编辑

也许,正如@alex23 指出的那样,您只想使用一些特定的东西,所以您可以这样写:

import com.foo.{foo, bar, baz}, bar._, baz._, qux._
于 2013-02-18T11:44:26.057 回答
9

从同一个包中导入多个类/对象的 Scala 方法是:

import scala.collection.immutable.{Map, HashMap, etc}

很酷的 Scala 唯一技巧:别名/重命名

import java.util.{Collection => JavaCollection}
于 2013-02-18T11:45:46.070 回答
1

目前你不能轻而易举地做到这一点,但你可以通过一些努力来接近。

如果您package object all为其他包中的每个类创建一个并设置类型别名,并为每个方法创建转发方法(如果其他方法是包对象),那么导入将执行您想要的操作。

已经有一些关于导出功能的讨论可以使这变得非常容易,但它甚至还不是一个具体的提议,更不用说实施了。

无论如何,您不需要一遍import又一遍地重复:

import com.foo.bar._, com.foo.baz._, ...

但是进一步缩短列表的所有方法都不会做完全相同的事情(例如,将导入名称bar本身,而不仅仅是其内容——这对您来说可能不是问题,但需要注意)。

也就是说,在导出机制出现之前,如果您在自己的行中输入所有内容,您的代码将具有最大的可读性和可维护性。当所有东西都卡在一条线上时,很难注意到缺少或多余的东西。

于 2013-02-18T15:01:01.360 回答
0

如果bar._, baz._, qux._构成一切,com.foo那么您可以简单地做com.foo._

于 2013-02-18T23:15:54.850 回答