2012-12-03 6 views
10

なんらかの理由で(Scala math)ライブラリに整数のpow関数はありませんが、の場合のみです。Scalaで正方形を表現する

整数用の正方形関数が必要で、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.2インチのコードを使用するのはすばらしいでしょう。

気にしないでください。私はシャットダウンし、ちょうど私自身のpow2機能を使用する必要がありますか?

+0

Iドン2つのパワーが本当に何を意味するのかを知っていると思う:https://en.wikipedia.org/wiki/Power_of_two –

+0

だから本当です。それに応じてタイトルとテキストを改めました。ありがとう。 – akauppi

答えて

24

はい、独自のpow2を使用してください。あなたがより高い力を必要とする場合は、とにかくIntの部屋がありません。 BigInt.powの使用を検討してください:もちろん

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

、あなただけのシフトを使用し、N しかしN 2をする必要はない場合。 (1 << k = 2 k)これらはBigIntでも動作します。

15

使用Unicode文字のためのバッククォート、および暗黙のクラス(スカラ2.10)は、任意のタイプの操作を追加する:

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

使用法:

3 `²` 

結果:

9 
+3

素晴らしい。しかし、ダニのようなものは、これを実際に使用することの正体を薄くする。しかし、良い点。 :) – akauppi

+0

パーサー/レクサーがバッククォートを必要とする理由は不思議です。 –

関連する問題