1

scala では、より短い import を可能にするためにパッケージ ステートメントをスタックするのが一般的ですが、スタックされたパッケージを使用してファイルを scala ide にロードし、同じ編成で始まるインポートを使用しようとすると、次のように見えるものからコンパイラ エラーが発生します。プレゼンテーション コンパイラ。コードは、IDE の外部の sbt で正常にコンパイルされます。

コード スニペットの例は次のとおりです。

package com.coltfred
package util
package time

import com.github.nscala_time.time.Imports._

インポート時にエラーが発生しますobject github is not a member of package com.coltfred.util.com

インポートを 1 行に移動するとエラーは解消されますが、コード ベースでこの方法を頻繁に使用しているため、すべてを 1 行のパッケージ ステートメントに変更するのは面倒です。

なぜこれが起こっているのですか、それを修正するために私にできることはありますか?

編集:

eclipse-sbt プラグインを使用して、このための eclipse プロジェクト ファイルを生成しました。ディレクトリ構造は本来あるべきものであり、すべての依存関係はクラスパスにあります。

編集2:

util パッケージのテスト ツリー (同じパッケージにあるはず) にファイルがあったことがわかりましたが、上部に重複したパッケージ ステートメントがありました。メインツリーのコンパイルには影響しないはずなので、テストツリーをチェックしていませんでしたが、どうやら間違っていたようです。

4

2 に答える 2

3

Scala IDE がこれを好まない理由はわかりませんが、次のコマンドを使用して最上位でインポートを強制的に開始できます_root_

import _root_.com.github.nscala_time.time.Imports._

それが IDE を刺激しないかどうかを確認してください。

于 2013-10-09T23:57:21.263 に答える
1

これは、paulp を悩ませて修正しようとした一般的な問題です。彼の考えは、クラスファイルを提供しないディレクトリはパッケージと見なされるべきではないというものでした。utilasを使用できる場合は、その util が空の場所よりもscala.util優先して使用する必要があります。foo.util

dir は通常の容疑者です。utilユーティリティ dir が転がっていない人はいないから./utilです。

apm@mara:~/tmp/coltfred$ mkdir -p com/coltfred/util/time
apm@mara:~/tmp/coltfred$ mkdir -p com/coltfred/util/com
apm@mara:~/tmp/coltfred$ vi com/coltfred/util/time/test.scala
apm@mara:~/tmp/coltfred$ scalac com/coltfred/util/time/test.scala
./com/coltfred/util/time/test.scala:5: error: object github is not a member of package com.coltfred.util.com
import com.github.nscala_time.time._
           ^
one error found
apm@mara:~/tmp/coltfred$ cat com/coltfred/util/time/test.scala
package com.coltfred
package util
package time

import com.github.nscala_time.time._

class Test

apm@mara:~/tmp/coltfred$ 

デバッグするには、問題のあるパッケージがどこからロードされているかを調べます。

于 2013-10-10T05:04:49.680 に答える