Scala - operátor mocniny
21. 12. 2010 (aktualizováno 30. 5. 2021) — k47 (CC by)

V některých jazycích je přítomen operátor mocniny (obvykle '**' nebo ^). Scala ho nemá, ale jako všechno ostatní se dá snadno doplnit.
class Powable(val v: Double) { def **(exp: Double) = Math.pow(v, exp) } implicit def doubleToPowable(v: Double) = new Powable(v); // test: 10 ** 3 // ekvivalent k Math.pow(10, 3) 1.1 ** 1.1 'a' ** 'b' // funguje na všech numerických typech (i na Char)
Ve Scale 3 je to o něco jednodušší. Stačí přímo použít extension
metody.
Navíc můžeme přidat klíčové slovo inline
. To zajistí, že tělo metody **
je
vždy plně inlinováno a všude se místo něj volá přímo metoda Math.pow
. V tomto
případě nejde o velkou výhru, JIT téměř jistě provede to samé, nicméně jde o příjemný bonus, kdy máme garanci, že abstrakce byla eliminována.
extension (d: Double) { inline def ** (exp: Double) = Math.pow(d, exp) }