ジェネリックなmax
なんか難しい。
scala> def max[T](a: T, b: T)(implicit orderer: T => Ordered[T]) = if (a > b) a else b max: [T](T,T)(implicit (T) => Ordered[T])T scala> max(1, 3) res6: Int = 3 scala> max(10, 3) res7: Int = 10 scala> max(10., 3.) res8: Double = 10.0 scala> max(10., 3) <console>:6: error: no implicit argument matching parameter type (AnyVal) => Ordered[AnyVal] was found. max(10., 3) ^
ふむふむ。
scala> def max[T <% Ordered[T]](a: T, b: T) = if (a > b) a else b max: [T](T,T)(implicit (T) => Ordered[T])T scala> max(2, 6) res0: Int = 6 scala> max(9, 6) res1: Int = 9 scala> max(9., 6.) res2: Double = 9.0 scala> max(9., 6) <console>:6: error: no implicit argument matching parameter type (AnyVal) => Ordered[AnyVal] was found. max(9., 6) ^
ほほーう。