Doubleにべき乗演算子をつくるには?finalクラスを拡張する方法
Scalaの暗黙の型変換については、以前にも扱った。
形式知にして使う、暗黙のimplicit - 戦略 Scala 日記
今回は、implicit class
を使って、クラスを拡張する方法を考える。
また継承が禁止されているJavaのfinalクラスを拡張して、オリジナルなメソッドをつくる例を紹介する。
scalaのDouble
では階上計算(^
)のメソッドが用意されていない。
そこで、^
を独自に定義してみる。
次のように、implicit class
でクラスを定義し、引数に拡張したいクラスをとることで、これは暗黙のクラスとして、暗黙の型変換同様にクラスを変換する。
implicit class HatDouble(d: Double)
ここで、階上計算をするためのメソッド^
を定義する。
すると、0.3^3
のように自然な計算ができるようになる。
implicit class HatDouble(d: Double) { def ^(idx: Int) = List.fill(idx)(d).fold(1.0)((d1, d2) => d1 * d2) } println(0.3^3) // => 0.027