由于某种原因(逃脱了我),Scala math
库没有pow
- 整数函数,但仅适用于Double
s。
我需要一个整数的平方函数,并且正在计算在Scala中执行此操作的常用方法。
object TestX extends App {
def pow2(v: Int)= v*v
//class MyRichInt( val v: Int ) {
// def ² : Int = v*v // says: "illegal character" for UTF-8 power-of-two
//}
println( pow2(42) )
//println( 42² )
println( math.pow(42,2).toInt )
}
我惊讶地看到Scala不喜欢'²'字符。也许它被认为是一个数字?通常,所有类型的奇怪Unicode值都是有效的,在代码中使用42²确实很奇特。
没关系。我应该闭嘴并开始使用我自己的pow2
功能吗?
答案 0 :(得分:24)
是的,请使用您自己的pow2
。如果你需要更高的权力,你可能无论如何也不会有Int
的空间。考虑使用BigInt.pow
:
scala> BigInt(40).pow(40)
res0: scala.math.BigInt = 12089258196146291747061760000000000000000000000000000000000000000
当然,如果你不需要N 2 但是2 N ,只需使用轮班。 (1 << k
= 2 k )这些也适用于BigInt
。
答案 1 :(得分:15)
对Unicode字符使用反引号,使用隐式类(Scala 2.10)在任意类型上添加操作:
implicit class PowerInt(i: Int) {
def `²`: Int = i * i
}
用法:
3 `²`
结果:
9