12

出于某种原因(这让我无法理解),Scalamath库没有pow用于整数的 -function,而仅用于Doubles。

我需要一个整数的平方函数,并且正在计算在 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功能吗?

4

2 回答 2

25

是的,使用你自己的pow2. 如果你需要更高的权力,你可能Int无论如何都没有空间。考虑使用BigInt.pow

scala> BigInt(40).pow(40)
res0: scala.math.BigInt = 12089258196146291747061760000000000000000000000000000000000000000

当然,如果您不需要 N 2而是 2 N,只需使用班次即可。( 1 << k= 2 k ) 这些BigInt也适用。

于 2012-12-03T18:25:09.400 回答
16

对 Unicode 字符使用反引号,并使用隐式类 (Scala 2.10) 来添加对任意类型的操作:

implicit class PowerInt(i: Int) {
  def `²`: Int = i * i
}

用法:

3 `²`

结果:

9
于 2012-12-03T19:18:37.587 回答