Scalaのインポートについてメモ
Instant Play Framework Starterを読み進めているが、Scalaを書いた事が無いので調べながら読み進めている。とりあえず、コップ本を読みながらパッケージのインポート周りを整理したのでメモしておく。
基本的なインポート文
クラスやオブジェクトを直接インポートするsingle type(単一型)と、パッケージ配下の全てのメンバをインポートするon demand(オンデマンド型)の2種類が存在する。on demandはJavaの*を使ってアクセスするのと等価。
// Fruitオブジェクトへのインポート(single type) import bobsdelights.Fruit // bobdelightsパッケージ下のすべてのメンバへアクセスする為のインポート(on demand) import bobdelights._
任意の場所でインポート
Javaではソースの冒頭だけでなく、任意の場所でインポートできる。以下のように関数の内部でインポートを記述しても文法的には間違っていない。
def showFruit(fruit: Fruit) { import fruit._ println(name + "s are " + color) }
それだけでなく、Fruitオブジェクトを直接参照できるようになる。printlnで使用されているnameとcolorはFruitに定義されているメンバだ。
インポートセレクター
インポートセレクターという機能を使うと特定のメンバーだけをインポートすることが出来る。特定のメンバだけ名前を変えたり、隠したりできる。これらは名前が重複する場合に重宝する。
// FuitsオブジェクトからApple, Orangeだけをインポートする import Fruits.{Apple, Orange} // FruitsオブジェクトのAppleを、McIntoshという名前でインポートする import Fruits.{Apple => McIntosh, Orange} // すべてのメンバをインポート(Fruits._と等価) import Fruits.{_} // Fruitsのメンバをインポートし、AppleをMcIntoshという名前でインポートする import Fruits.{Apple => McIntosh, _} // Pear以外のメンバをインポートする import Fruits.{Pear => _, _}