Scala导入多个包

时间:2013-02-18 11:39:04

标签: scala package

我在自己的包中有一些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 个答案:

答案 0 :(得分:11)

我能提出的最短形式是:

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._

答案 1 :(得分:7)

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

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

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

import java.util.{Collection => JavaCollection}

答案 2 :(得分:1)

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

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

有一些关于export feature的讨论会使这更容易,但它甚至不是一个具体的提案,更不用说实施了。

在任何情况下,您都不需要反复重复import

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

但是所有缩短列表的方法都没有完全相同的事情(例如,将导入名称bar本身,而不仅仅是其内容 - 这对您来说可能不是问题,但它是某种东西要注意)。

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

答案 3 :(得分:0)

如果bar._, baz._, qux._构成com.foo中的所有内容,那么您可以com.foo._