如何在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 { ... } 

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

2 Solutions collect form web for “如何在Kotlin中定义新的操作符?”

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

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

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

用法:

 5 `^` 3 

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

 1 + 1 `^` 3 == 8 

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

  • >无法应用插件>对于输入字符串:“”
  • 代码“val jsonObj = json作为JsonObject”在Kotlin中是什么意思?
  • 将带有空字段的对象转换为带有不可空字段的对象或null
  • 为什么对象表达式中的代码可以访问kotlin中包含的变量?
  • Kotlin NDArray与一个带有泛型返回类型的lambda构造函数
  • Kotlin和Android lint检查
  • Android室库错误:无法findsetter的字段。 (科特林)
  • 如何找到哪个元素在Kotlin中的数组比较失败?
  • 当使用Java / Kotlin进行编程时,建议使用尾递归还是迭代版本? 性能有什么不同?
  • 适配器或ViewHolder中的Kotlin综合
  • 类型在kotlin中不匹配
  • Kotlin language will be the best programming language for Android.