2012-05-09 12 views
1

パッケージをパッケージオブジェクトにインポートする際に問題があります。それはEclipseで動作するように見えなかったので、私はintellijに切り替えました。ある時点で機能が動作していたようで、ほとんどのパッケージ用のパッケージオブジェクトを作成しました。今は全く動いていないようです。ここでは、パッケージオブジェクトは、ファイルpackage.scalaでだ、パッケージファイル自体は正常にコンパイル:Scala:パッケージオブジェクトをパッケージオブジェクトにインポートする

package rStrat.rSwing 
package testSw //Edited for clarity 

object testSw 
{ 
    import rStrat._ 
    import rSwing.topUI._ 
} 

、ここでは同じモジュールやパッケージからのクラスファイルです。

package rStrat.rSwing.testSw 

object MainTest { 
    def main(args: Array[String]) 
    { 
    val testApp = new AppWindow //Appwindow is a member of topUI 
    testApp.open 
    } 
} 

mainUIパッケージを直接MainTestファイルにインポートすると問題なく動作します。パッケージ全体または特定のクラスをインポートしようとするかどうかは違いありません。この法的なスカラーですか? IDEに問題はありますか?

私は、Scalaはファーストクラスの輸入を持っていません最終的なScalaの2.92、IntelliJの11.1.1、JDK 1.6.0_31、Eclipseの3.7.2

+2

は "package object testSw"ですか? –

+0

あなたは私の希望を一瞬そこに持っていませんでした。それは何の違いもないようです。 –

+0

'パッケージオブジェクトtestSw'を' rStrat.rSwing'という宣言をしたファイルに置きます。 – ziggystar

答えて

4

を使用しています。パッケージにクラスと特性の宣言のみが含まれる場合、パッケージオブジェクトにはvar,valdeftype(型名)、暗黙的なものなど、他の有効なScala宣言が含まれます。どんなオブジェクトでも、物をインポートすることができますが、パッケージの残りの部分には推移的に伝播せず、したがって、他の世界には見えません。

+0

ああ、私たちが2.8で外側のパッケージを自動的に取り込むのを失ったのは間違いです。 C#で常に望んだことの1つは、一種の複数の名前空間継承を取得するためのインクルードステートメントでした。 –

+1

[このリンク](http://www.artima.com/scalazine/articles/selfless_trait_pattern.html)をご覧ください。正直言って、それはあなたが望むものではありませんが、多分それはあなたにいくつかの代替案を指摘します... – agilesteel

3

これは、オブジェクトrStrat.rSwing.testSw.testSw作成します。これは、パッケージオブジェクトrStrat.rSwing.testSw作成

package rStrat.rSwing 
package testSw //Edited for clarity 

package object testSw 

::これは、パッケージオブジェクトrStrat.rSwing.testSw.testSw作成

package rStrat.rSwing 
package testSw //Edited for clarity 

object testSw 

package rStrat.rSwing 

package object testSw 

それは最後の1だとします欲しいです。

関連する問題