在斯卡拉表达广场

aka*_*ppi 11 scala

出于某种原因(逃脱了我),Scala math库没有pow整数函数,只能用于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 )
}
Run Code Online (Sandbox Code Playgroud)

我惊讶地发现Scala不喜欢"²"字符.也许它被认为是一个数字?通常,所有类型的奇怪Unicode值都是有效的,并且在代码中使用42²确实很奇特.

没关系.我应该闭嘴并开始使用我自己的pow2功能吗?

Rex*_*err 24

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

scala> BigInt(40).pow(40)
res0: scala.math.BigInt = 12089258196146291747061760000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

当然,如果你不需要N 2但是2 N,只需使用轮班.(1 << k= 2 k)这些BigInt也适用.


ido*_*nie 15

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

implicit class PowerInt(i: Int) {
  def `²`: Int = i * i
}
Run Code Online (Sandbox Code Playgroud)

用法:

3 `²`
Run Code Online (Sandbox Code Playgroud)

结果:

9
Run Code Online (Sandbox Code Playgroud)

  • 大.但这种嘀嗒声淡化了实际使用它的好处.虽然好点.:) (5认同)