Implicit Conversions
「暗黙」シリーズ二つめ。「implicit」をつけた型変換用関数を定義しおくと、暗黙の型変換が行われるようになります。
- 型変換は、必要なときに自動的に変換関数が実行されることで行われます。
- 型変換用の関数は「implicit」をつけて定義しておく必要があります。
- 使われる変換関数は型にあわせて最適なものが選択されます。
// テスト用のクラス class Kitten(age:Int, name:String) { def getAge = age def getName = name } object ImplicitConversionsSample { def main(args: Array[String]) { // 型変換用関数。「implicit」をつけておく。 implicit def kittenToString( k:Kitten ):String = { println("convert Kitten to String!") k.getName } implicit def kittenToInt( k:Kitten ):Int = { println("convert Kitten to Int!") k.getAge } // Kittenを、Stringを指定するべき場所に指定すると // コンテキストで使えるimplicitな関数が実行され、型変換が行われる。 var s:String = new Kitten(1, "mii") println( s ) // Intの場合は、Intを返すようなimplicit関数が選択される。 var i:Int = new Kitten(1, "mii") println( i ) } }
実行結果です。
convert Kitten to String! mii convert Kitten to Int! 1