Scala导入多个包

12

我有一些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个回答

12
我能提供的最短表述是:
import com.foo._, bar._, baz._, qux._

例如:
import scala.collection.mutable._, PriorityQueue._, ArrayBuffer._

编辑

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

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

11

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

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

酷炫 Scala 技巧:别名/重命名

import java.util.{Collection => JavaCollection}

在我看来,@paulmdavies 不仅想要导入 Map、HashMap 等类,还想导入它们的内容。 - om-nom-nom
请记住,当您导入collection.mutable.ArrayBuffer._时,导入的名称仅限于来自object ArrayBuffer的名称。您可以导入类成员,但只能从特定实例中导入。 - Randall Schulz

1

目前你无法轻松地完成它,但是如果付出一些努力,你可以非常接近。

如果你创建一个名为allpackage object,并为其他包中的每个类设置类型别名,并为每个方法(如果其他方法是package objects)创建转发方法,则导入将完成您想要的功能。

有一些关于导出特性的讨论,这将使得这个过程更加容易,但是它甚至还不是一个具体的提案,更不用说实现了。

无论如何,你都不需要反复重复import

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

但是,进一步缩短列表的所有方法都不完全相同(例如,将导入名称bar本身,而不仅仅是其内容--这可能对您来说不是问题,但需要注意)。
话虽如此,在导出机制出现之前,如果您将所有内容分行输入,则您的代码将具有最大的可读性和可维护性。当所有内容挤在一行时,很难注意到缺少或多余的东西。

0
如果 bar._, baz._, qux._ 组成了 com.foo 中的所有内容,那么你可以简单地使用 com.foo._

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接