直角三角形斜边的平方等于另外两条边的平方和。
这就是毕达哥拉斯定理。根据斜边长度“a”和“b”计算斜边的函数将返回 sqrt(a * a + b * b)。
问题是,您如何在 Scala 中定义这样一个函数,使其可以与实现适当方法的任何类型一起使用?
对于上下文,想象一下您想要与 Int、Double、Int-Rational、Double-Rational、BigInt 或 BigInt-Rational 类型一起使用的整个数学定理库,具体取决于您正在做什么以及速度、精度、准确性和范围要求。
这仅适用于 Scala 2.8,但它确实有效:
scala> def pythagoras[T](a: T, b: T, sqrt: T => T)(implicit n: Numeric[T]) = {
| import n.mkNumericOps
| sqrt(a*a + b*b)
| }
pythagoras: [T](a: T,b: T,sqrt: (T) => T)(implicit n: Numeric[T])T
scala> def intSqrt(n: Int) = Math.sqrt(n).toInt
intSqrt: (n: Int)Int
scala> pythagoras(3,4, intSqrt)
res0: Int = 5
更一般地说,特质Numeric
有效地为如何解决此类问题提供了参考。也可以看看Ordering
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)