Scalaで独自のPredefっぽいものをつくって、importを極力減らすテクニック

package object使えばそれっぽいことできますが、package objectはpackage内のみなので、相対importを使うことによって、もっとひたすら簡略化するためのもの

  1. 自分のライブラリなり、アプリケーションの「一番上のpackageで」package objectを定義
  2. かなり大量にどこでも使うようなものを、そのpackage objectに全部押し込める*1
  3. 他のファイルでは、package文を2行に分けて書く

packege文を2行に分けるというのは、そうすると相対importをしたことと同等の効果があり、上位のpackageのpackage objectで定義したものが、スコープに入ります。(たしか、2.8から導入された機能? http://d.hatena.ne.jp/kmizushima/20100223/1266940545#c1266977695 )

以下サンプル


まぁpackage2行に書くのと、

代わりに例えば「Imports」っていうobject作っておいて、どのファイルでも「import hoge.Imports._」と書く、という決まりにする

のでは、それほど記述量は変わらないのですが、importのオブジェクトに名前つけたくないとか、そういう細かい気持ちの問題です、たぶん。


「packege文を2行に分けることにより相対importと同様の効果を得る」パターンは、Scala本体のcollectionで使われてます

https://github.com/scala/scala/blob/v2.10.1/src/library/scala/collection/immutable/List.scala#L11-L12

*1:分けて定義しておいて、そいつに継承させるのもあり