Как определить нового оператора в Котлине?

Можно ли определить общий оператор возведения в степень, который можно связать следующим образом:

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

Согласно документам можно расширить классы с помощью функций infix:

 // 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, поэтому он не может быть перегружен).

Intereting Posts