2012-12-03 39 views
10

由於某種原因(逃避我),斯卡拉math庫沒有pow功能整數,但只有Double s。在斯卡拉表達廣場

我需要一個整數的平方函數,並計算出什麼可能是在斯卡拉這樣做的常用方法。

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) 
} 

我很驚訝地看到'²'角色不被斯卡拉喜歡。也許這是一個數字?通常,各種奇怪的Unicode值是有效的,並且在代碼中使用42²確實是很花哨的。

沒關係。我應該閉嘴,並開始使用我自己的pow2功能?

+0

我不你以爲你知道兩種力量的真正含義: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 但2 ñ,只是使用的變化。 (1 << k = 2 k)這些也與BigInt一起工作。

15

使用反引號的Unicode字符,和隱式類(斯卡拉2.10)上添加任意類型的操作:

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

用法:

3 `²` 

結果:

9 
+3

太好了。但是蜱蟲的種類會稀釋實際使用它的好處。雖然好點。 :) – akauppi

+0

我想知道爲什麼解析器/詞法分析器需要反引號。 –