什么是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。或者,您可以创建自己的方法。

它非常直接。因为它是一个扩展功能;只需在.powDouble对象上调用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指数运算符的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Kotlin 不支持“三元运算符”[关闭]

Kotlin 扩展函数和运算符重载[第一行代码 Kotlin 学习笔记]

Python - 不懂运算符 - 指数

C#中有指数运算符吗?

Kotlin三元运算符[重复]

Kotlin-数组