編集: Scala 2.9.2 を使用しています
Scala では、Double をラップするカスタム クラスを定義しました。
class DoubleWrap( d : Double ) {
def double( ) = d * 2
}
Double から DoubleWrap への暗黙的な変換:
implicit def wrapDouble( d : Double ) = new DoubleWrap( d )
これにより、次のことが可能になります。
scala> 2.5.double
res0: Double = 5.0
ただし、Scala には Int から Double への暗黙的な変換があるため、次のこともできます。
scala> 2.double
res1: Double = 4.0
この演算子は、double 型コレクションのすべての要素に適用することもできます。map
scala> List( 1.0, 2.0, 3.0 ).map( _.double )
res2: List[Double] = List(2.0, 4.0, 6.0)
ただし、関数を整数コレクションのすべての要素に適用しようとすると、機能しません。
scala> List( 1, 2, 3 ).map( _.double )
<console>:10: error: value double is not a member of Int
List( 1, 2, 3 ).map( _.double )
なぜこれが事実なのか誰にも分かりますか?