los tipos de datos sin firmar podrían ser buenos para el acceso a la matriz. Por lo general, los índices no están firmados de todos modos. Pero actualmente no puedo hacer esto directamente. Por ejemplo, este código.
val foo = 1.toUInt() "foo"[foo]no se puede compilar con:
error: type mismatch: inferred type is UInt but Int was expected¿Cuál es la mejor manera de lidiar con esto? Claro que podría hacer:
val foo = 1.toUInt() "foo"[foo.toInt()]pero esto se siente mal de alguna manera. UInt es una clase en línea de todos modos y se borra a Int de todos modos, por lo que creo que esto no debería ser necesario. ¿Alguien vio un kotlin/KEEP para esto? También me pregunto cómo definir constantes sin firmar. Desafortunadamente, el constructor es privado, por lo que no puedo hacer, por ejemplo.
const val foo = UInt(42)y
const val foo = 42.toUInt() falla con 42.toUInt() no es un valor constante
En la pregunta de indexación de matrices, .toInt() es el mejor método que he encontrado.
Al declarar una const, puede agregar una "u" a cualquier constante entera, o "uL" para una constante larga, como 42u o 1_000_000_000_000uL .
A menos/hasta que haya soporte incorporado para esto, puede agregarlo usted mismo fácilmente. Por ejemplo, para matrices estándar:
operator fun <T> Array<T>.get(index: UInt) = this[index.toInt()] Y para CharSequence s (que no son matrices):
operator fun CharSequence.get(index: UInt) = this[index.toInt()] Con eso en el alcance, ¡tu "foo"[foo] funciona bien!
(También necesitaría sobrecargas separadas para IntArray & c si las usara).