12

何らかの理由で (それは私を逃れます)、Scalaライブラリには整数用の -functionmathがありませんが、s 用の関数しかありません。powDouble

整数の 2 乗関数が必要で、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 に答える