Jim Balterは、彼の回答の中でScala 2.8パッケージオブジェクトについて言及しています(賛成票を投じてください) 。
クラス内に配置できるあらゆる種類の定義は、パッケージの最上位に配置することもできます。パッケージ全体のスコープに入れたいヘルパーメソッドがある場合は、先に進んでパッケージのトップレベルに配置します。
これを行うには、定義をパッケージオブジェクトに入れます。各パッケージは1つのパッケージオブジェクトを持つことができます
Scalaには実際には独自のscalaパッケージオブジェクトがあります。「パッケージオブジェクトを配置する場所
」を参照してください。
したがって、パッケージオブジェクトは、特定のパッケージの明示的なインポートの問題を解決できますが、どのパッケージの問題も解決できません。
現在の制限は次のとおりです。
- まず、パッケージオブジェクトでオーバーロードされたメソッドを定義または継承することはできません。
- 次に、同じパッケージ内の最上位クラスまたはオブジェクトの名前でもあるパッケージオブジェクト内のメンバーを定義または継承することはできません。
将来のScalaリリースでは、これらの制限が解除されると予想されます。
元の答え:
Scala側では、「Scalaはデフォルトでscala.collection.JavaConversions._をインポートする必要がありますか?」のような質問は、Scalaユーザーとしてデフォルトのインポートを追加することはできないことを示しています。
言語によってサポートされている必要があります。
ちなみに、結論は次のとおりです。
Scalaの専門家の観点から:物事を単純に保ち、デフォルトでインポートされる暗黙を絶対最小に制限しましょう。
ヘイコ・シーバーガー
しかし、ラファエルはコメントしています:
いくつかのパッケージを追加するために独自のコンパイラプラグインを作成できると思いますか?
そして確かに、このScalaの記事では、Scalaコンパイラーを拡張する方法について説明しています。
ただし、サポートされる主な追加機能は次のとおりです。
- コンパイラーにフェーズを追加して、型チェックの終了後に適用される追加のチェックまたは追加のツリーの書き換えを追加できます。
- 型に適用することを目的とした注釈に関するコンパイラの型チェック情報を伝えることができます。
したがって、ツリーの書き換え(追加のインポートを含む)を使用しても、型と関数(要求している暗黙のインポートによって参照される)を正しく分析できるように書き換えが行われるかどうかはわかりません。
しかし、おそらくScalaコンパイラコーナーにはそれに関するより多くのアイデアがあります。