暗黙の型変換
ある型に対して、型が適合しなかった場合に起動する型の変換処理を、ユーザが定義できる機能
code:scala
implicit def メソッド名(引数名: 引数の型): 戻り値の型 = 式
引数の型から戻り値の型への暗黙の型変換を定義した事になる。
大きく分けて2通り
互換性のない型が渡される場合
非推奨
存在しないメソッドが呼び出される場合
現在使われている暗黙の型変換の大半はこの使い方
code:scala
class RichInt(val self: Int){
def isPositive: Boolean = self > 0
}
implicit def enrichInt(self: Int): RichInt = new RichInt(self)
// 上のような定義があるとき
1.isPositive
// 上記の式は
new RichInt(1).isPositive
// に変換される
takkii.icon上記だと、
1(Int)には.isPositiveが存在しない
そのため変換できるものを探す。implicit defの中で引数にIntを取り、かつ変換後の型が.isPositiveをメソッドにもつものを探す。探す場所はimplicitの探索範囲参照。 enrichIntが引数にIntをもっていて、変換後のRichIntは.isPositiveをメソッドに持っているため、1はこれに変換される。