如何在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,所以它不能被重载)。