1

私は小さなScalaプロジェクトに取り組んでいます。'import'に関して次の問題があります。

ファイルの1つの先頭で、次のコマンドを使用して2つのものをインポートする場合:

import main.Main._
import main.game.Game
       ^^^^

下線が引かれた「main」という単語に次のエラーメッセージが表示されます。「オブジェクトMainのメソッドmainの引数がありません。部分的に適用された関数として扱いたい場合は、このメソッドの後に「_」を付けてください」。これは単なるインポートステートメントです。そして当然、実際のインポートは発生しません。最初はセミコロン推論の癖についてもう一度考えましたが、そうではありません。2行を入れ替えて、次のように記述した場合:

import main.game.Game
import main.Main._

その後、すべてが大丈夫です。

誰かがそれに光を当てることができますか?Scalaの何か特別なことですか?

4

2 に答える 2

8

おそらく、 にmainメソッドがあると思いますobject Main。そのため、パッケージimport main.Main._ mainの代わりにこのメソッドを参照します。mainいくつかの方法で回避できます。

  1. 質問のように、インポート順序を変更します。
  2. mainDaniel C. Sobralの回答が示唆するように、メソッドをインポートしないでください。
  3. mainトップレベルのパッケージが欲しいと明示的に言います:

    import _root_.main.game.Game
    

通常の Java パッケージの命名規則に従うと、ほとんどの場合、この問題を回避できます。メンバー (またはサブパッケージ) をcomor org(net問題になる可能性があります) と呼ぶことはほとんどないからです。

于 2012-01-01T14:07:55.553 に答える
6

maininsideという名前のメソッドmain.Mainがありますね。さて、あなたがそれをインポートしたので、それは名前でパッケージmainを隠しました. これを試して確認できます:

import main.Main.{main => _, _}
import main.game.Game

mainこれにより、インポートが除外されます。

于 2012-01-01T14:07:24.927 に答える