2013-02-18 43 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._