2013-02-18 44 views
5

我已经有一些Scala类和对象,在他们自己的包中。每个包都有定义一些implicits一个包对象,因此,例如import com.foo.bar._全进口implicits和类从bar斯卡拉导入多个包

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

import com.foo.all._ 

相当于

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

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

回答

10

,我可以想出最短的形式是:

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

例如:

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

编辑

也许,你希望只使用一些特定的事情,as @alex23 pointed out,所以你可以写:

import com.foo.{foo, bar, baz}, bar._, baz._, qux._ 
7

斯卡拉方式导入多个类/从同一个包中的对象是:

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

酷斯卡拉唯一的诀窍:别名/重命名

import java.util.{Collection => JavaCollection} 
+0

IMO,@paulmdavies要进口,不仅地图,HashMap和等等,而且还使他们的内容。 – 2013-02-18 11:46:42

+0

请记住,当你输入,比方说,'collection.mutable.ArrayBuffer._'进口的名字是只有那些从'对象ArrayBuffer'。您可以导入类成员,但只能从特定实例导入。 – 2013-02-18 14:16:52

1

目前你不能做到这一点平凡,但你可以用一些努力来相当接近。

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

已经对export feature进行了一些讨论,它会让这个更容易,但它甚至不是一个具体的建议,更不用说实施了。

在任何情况下,你不需要一遍又一遍地重复import

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

,但所有的方法来缩短列表还没有做同样的事情(例如,将导入名称bar本身,而不仅仅是它的内容 - 这对你来说可能不是问题,但它是需要注意的)。这就是说,直到出口机制出现,如果你在自己的产品线上输入所有东西,你的代码将是最大可读性和可维护性的。当一条线路堵塞时,很难注意到丢失或多余的东西。

0

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