Выражая квадрат в Scala
По какой-то причине (которая ускользает от меня) библиотека Scala math
не имеет функции pow
для целых чисел, но только для Double
s.
Мне нужна квадратная функция для целых чисел, и выяснилось, что может быть обычным способом сделать это в 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. Может быть, это номер? Обычно все виды странных значений Юникода действительны, и использование 422 в коде действительно было бы фантазией.
Ничего. Должен ли я заткнуться и начать использовать собственную функцию pow2
?
Ответы
Ответ 1
Да, используйте свой собственный pow2
. Если вам нужны более высокие полномочия, у вас, вероятно, не будет места в Int
. Рассмотрим использование BigInt.pow
:
scala> BigInt(40).pow(40)
res0: scala.math.BigInt = 12089258196146291747061760000000000000000000000000000000000000000
Конечно, если вам не нужно N 2 но 2 N просто используйте сдвиги. (1 << k
= 2 k) Они также работают с BigInt
.
Ответ 2
Используйте обратные ссылки для символов Юникода и неявные классы (Scala 2.10), чтобы добавить операцию на произвольные типы:
implicit class PowerInt(i: Int) {
def `²`: Int = i * i
}
Использование:
3 `²`
Результат:
9