2016-06-04 13 views
4

Ist es möglich, eine allgemeine Potenzierungsoperator zu definieren, die wie folgt angeschlossen werden können:Wie definiere ich einen neuen Operator in Kotlin?

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

Nach der Dokumentation ist es möglich, Klassen mit Infix Funktionen erweitern:

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

Aber sie haben nicht Symbole wie ^

+0

Als Abgesehen davon, selbst wenn es möglich wäre, einen Exponentenoperator zu definieren, würde ich die Verwendung von '^' empfehlen. In Java, C# und vielen anderen Sprachen führt der '^' Operator [xor] (https://en.wikipedia.org/wiki/Exclusive_or) aus, so dass es überraschend wäre, wenn er in Kotlin etwas anderes macht. – ean5533

+0

Ja, '**' wäre wahrscheinlich die sicherere Wahl. – TomTom

Antwort

14

Leider können Sie keine neuen Operatoren definieren, es gibt nur predefined set von denen, die überlastet werden können. Einige Operatoren können zu diesem Set später hinzugefügt werden, es gibt einen issue im Kotlin Issue Tracker.

Sie können jedoch backticked Namen verwenden infix Erweiterungsfunktionen zu definieren, die wie Betreiber aussehen (viel weniger hübsch obwohl):

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

Verbrauch:

5 `^` 3 

Beachten Sie, dass infix Funktionen haben Vorrang niedriger als das der Betreiber, so

1 + 1 `^` 3 == 8 
+6

alle der oben genannten, aber "zum Glück" – voddan

+0

Ich hoffe, dass sie erwägen, einen Power-Operator hinzuzufügen, da es in jeder Art von Mathematik weit verbreitet ist. 'Math.pow' ist ein bisschen klobig imo. – TomTom

+0

Ich stimme für "leider" – Ixx

0

No. Kotlin erlauben nur eine vordefinierte Satz von Operatoren ermöglicht eine Überlastung, wie sie inangegebenen. Und ^ ist nicht einer von ihnen (es ist nicht einmal ein Operator AFAIK, so kann es nicht überlastet werden).

Verwandte Themen