2013-02-18 3 views
5

Scalaのクラスとオブジェクトを独自のパッケージに持っています。例えばbarパッケージからimport com.foo.bar._輸入のすべての暗黙とクラスは、私が知りたいのですがどのようなScalaは複数のパッケージをインポートします

は、「傘」の輸入を定義するが方法です、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._ 

EDITおそらく

、あなただけのいくつかの特定の事柄、as @alex23 pointed outを使用したいです、あなたは書くかもしれません:

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

同じパッケージから複数のクラス/オブジェクトをインポートするにはScalaの方法は次のとおりです。

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

クールスカラだけのトリック:エイリアシング/現在、あなたは自明それを行うが、あなたすることはできません

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

を行うことができるよりもcom.fooのすべてを構成する場合は、@paulmdaviesは、Map、HashMapのとそうではなく、また、それらの内容だけでなく、インポートしたいです。 –

+0

'collection.mutable.ArrayBuffer._'をインポートするとき、インポートされる名前は' object ArrayBuffer'からのものだけであることに注意してください。クラスメンバーをインポートできますが、特定のインスタンスからのみインポートできます。 –

1

の名前を変更しますいくつかの努力でかなり近づくことができます。

package object allを作成し、他のパッケージのすべてのクラスにタイプエイリアスを設定し、すべてのメソッドの転送方法を作成すると(他がパッケージオブジェクトの場合)、インポートによって必要な処理が行われます。

export featureについての議論がありましたが、これははるかに簡単ですが、まだ具体的な提案ではありません。いずれの場合においても

、あなたは何度も何度もimportを繰り返す必要はありません。

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

が、リストを短くするすべての方法は、さらに、まったく同じことをしない(例えば、名前をインポートしますbarそのコンテンツだけではなく、これはあなたにとって問題ではないかもしれませんが、それは気づくべきことです)。

つまり、エクスポートの仕組みが来るまで、すべての行を独自の行に入力すると、コードは最大限に読み込み可能で保守可能になります。すべてが1行に詰まっている場合、何かが見つからないか余分に気付くのはずっと難しいです。

0

bar._, baz._, qux._は、あなたは、単にIMO com.foo._

関連する問題