2012-12-11 4 views
6

たとえば、パッケージcom.example.a.b.cの下に大量のケースクラスを持つScalaプロジェクトがあるとします。これらのクラスをすべてcom.example.cパッケージにインポートしたいので、私のプロジェクトの他の場所では、com.example.ccom.example.a.b.cのすべてのケースクラスを使用する必要があります。import com.example.c._のみです。パッケージを別のものとしてインポート

どうすればいいですか?

+0

あなたは論理的な方法でコードを整理しようとしていますが、あなたは組織を管理できますか?もしそうなら、 'com.example.a.b.c'の大文字小文字のクラスを特性(または特性)で定義し、' package objects c extends ThatTrait'と書くことができます。 Scalazは、このアプローチを広く使用しています。 –

+0

これは興味深いアプローチです!実際には 'com.example.a.b.c'を制御できないので、チームと議論しなければなりません。 – user510159

答えて

8

エクスポートのメカニズムを追加することについての議論がありますが、それが起こるかどうかは不明です。いずれの場合においても

は、今のところ唯一の方法は

、例えばだから

すべてのオブジェクトに等しいヴァルを設定し、すべてのクラスの種類

  • を定義
    • であります
      package bar 
      case class Foo(i: Int) {} 
      

      は別のパッケージで模倣する必要があります。

      package object baz { 
          type Foo = bar.Foo 
          val Foo = bar.Foo 
      } 
      

      これに直面すると、通常、余分なインポートが2回かかります。

  • +0

    ありがとうRex!受け入れられる!私は余分な輸入が簡単な解決であることに同意しますが、どこにでもこれらが必要なときには本当に苦痛で、4つの余分な輸入明細書で終わることになります。そしてメンテナンスのために、私はむしろ単一の場所で急激な変化を起こしたいと思います。 – user510159

    1

    scalaのimport文は、コンパイラが物理的にヘッダファイル全体をコピーするC/C++の#includeディレクティブとは異なり、javaのような他のクラスをどこに見つけるかコンパイラに指示します。 com.example.a.b.cのケースクラスを使用する場合は、これを従来通りの方法で独自のパッケージからインポートする必要があります。

    関連する問題