什么是Kotlin指数运算符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是Kotlin指数运算符相关的知识,希望对你有一定的参考价值。
什么是Kotlin中的指数运算符。我以为它会是**
但它似乎在我的代码中引发错误。
when (pendingOperation)
"=" -> operand1 = value
"÷" -> operand1 = if (value == 0.0)
Double.NaN // handle attempt to divide by zero
else
operand1!! / value
"x" -> operand1 = operand1!! * value
"−" -> operand1 = operand1!! - value
"+" -> operand1 = operand1!! + value
"a^b" -> operand1 = operand1!! ** value
与Java一样,Kotlin没有指数运算符。 Java有Math.pow
,你也可以和Kotlin一起使用,但是Kotlin也有Float和Double的扩展功能,你可以使用它。
如果你需要使用带有Ints或Longs的指数,你只需要转换为double,然后再转换为int / long。或者,您可以创建自己的方法。
它非常直接。因为它是一个扩展功能;只需在.pow
或Double
对象上调用Float
:
"a^b" -> operand1 = operand1!!/*.toDouble()*/.pow(value)/*.toInt()*/
//Not sure what type operand1 is, so the comments are there if it's not a double or float, and the second assumes it's an int
但是,您可以创建一些中缀函数来获得一个。这里的想法是使用Kotlin名称的转义字符来创建Python样式的指数运算符。除非你知道自己在做什么,否则自己创建pow方法的代码并不是一个好主意。
/**
* Integer power using [Double.pow]
*/
infix fun Int.`**`(exponent: Int): Int = toDouble().pow(exponent).toInt()
/**
* Long power using [Double.pow]
*/
infix fun Long.`**`(exponent: Int): Long = toDouble().pow(exponent).toLong()
/**
* Double power using [Double.pow]
*/
infix fun Float.`**`(exponent: Int) : Float = this.pow(exponent)
/**
* Float power using [Float.pow]
*/
infix fun Double.`**`(exponent: Int) : Double = this.pow(exponent)
哪个允许你打电话:
val x = 10
val exponent = 2
println(x `**` exponent)
assertEquals(x `**` exponent, 100)
注意反引号(``
) - 在Kotlin中,它们用于转义关键字和其他“非法”名称,并将它们用作实际变量或函数名称。即var `this`
可能是一个变量名,但必须被称为`this`
。
如果您不知道infix
关键字是什么,它可以启用没有句点和括号的调用函数。它在这里使用的原因是使x `**` exponent
成为一个实际有效的函数调用 - 没有它,它必须是field.`**`(2)
。您可以阅读有关中缀函数in the documentation的更多信息
你也可以选择一个不同的名字来摆脱反引号 - 我只是使用了**
,主要是因为它类似于Python。它也用于javascript,也可能是其他一些语言。如果您选择的名称是非法的,您仍然需要反引号。
使用扩展方法pow
inline fun Double.pow(x: Double): Double (source)
更多细节pow
以上是关于什么是Kotlin指数运算符的主要内容,如果未能解决你的问题,请参考以下文章