如何在Kotlin中定义新的操作符?

是否有可能定义一个通用的指数运算符,可以这样接口:

> 10^3 // 1000 > 2.71^2 // 7.3441 > 3.14^(-3.14) // 0.027.. 

根据文档,可以使用中缀函数来扩展类:

 // Define extension to Int infix fun Int.exp(exponent: Int): Int { ... } 

但是他们不允许像^这样的符号

不幸的是,你不能定义新的操作符,只有那些可以重载的预定义操作符。 稍后有些操作员可能会添加到此设置中,Kotlin问题跟踪器中存在一个问题 。

但是,你可以使用空格名来定义看起来像运算符的中infix函数(虽然不太漂亮):

 infix fun Int.`^`(exponent: Int): Int = ... 

用法:

 5 `^` 3 

请注意,中infix函数的优先级低于运算符,因此

 1 + 1 `^` 3 == 8 

没有。Kotlin只允许重载一组预定义的操作符,如文档中所示 。 而^不是其中之一(它甚至不是运算符AFAIK,所以不能被重载)。