Se esperaba Int, se obtuvo IntProgression en su lugar
Intento conectarme con Kotlin, así que sigo este tutorial .
Entonces están tratando de crear una secuencia dada una cadena, como esta:
- Android Unit Test of Kotlin class falla con "no se puede encontrar la class de símbolo ..."
- Visibilidad de Kotlin de los miembros nesteds
- kotlin no resuelto enlace KDoc pero a IntelliJ no le gusta la import que lo arregla
- Obtener una reference a una function de Kotlin como método Java
- La 'anulación' del modificador no es aplicable a 'getter'
"a vect" -> [ a vect : a vec : t a ve : ct ... ]
Y la forma de hacerlo es, según el video, lo siguiente:
val seq = sequenceOf(canonicalisedInput.lastIndex + 1 downTo 0).map { canonicalisedInput.substring(0, it) to canonicalisedInput.substring(it) }
Y obtengo lo que hago (bueno, la idea de eso). El problema es que la substring
espera dos Int
, mientras it
(que supongo que es un iterador implícito de algunos géneros que proviene de la progresión downTo
) es una IntProgression
. Lo mismo para la segunda llamada de substring
.
¿Qué me estoy perdiendo?
- Conversor de Java a Kotlin y arguments de método nulable
- ¿Es posible usar Allatori en el código fuente de Kotlin?
- Kotlin: function genérica como tipo de retorno?
- Cómo get el valor emitido desde el primer observable
- Enlace de un model de dominio con campos anulables en ItemViewModel
- seleccionar varias fotos funciona solo una vez
- ¿Cómo se usan las classs anónimas de Kotlin como arguments para las funciones nativas de JavaScript?
- Kotlin: ¿Cómo puedo get la class de delegación de una propiedad miembro?
El código que ha publicado contiene un error: sequenceOf(...)
con un único argumento pasado devuelve una secuencia con ese elemento, es decir, Sequence<IntProgression>
. Para get una secuencia de índices ( Sequence<Int>
), use en asSequence()
lugar la function asSequence()
:
(canonicalisedInput.lastIndex + 1 downTo 0).asSequence().map { ... }
La function de substring(...)
llamada segunda es la sobrecarga que devuelve la subcadena a partir del índice pasado como argumento .
Y es el nombre implícito para el parámetro más interno de lambda , en su caso es el parámetro del map
, es decir, el elemento de secuencia que se asignará por la lambda.
Entonces, la expresión dentro de lambda es un par (creado por la function infijo ) de dos subcadenas, una desde el comienzo de la cadena original hasta el índice en la secuencia, la otra, desde ese índice hasta el final de la cadena.
Entonces el código definitivamente debería funcionar con la secuencia de índices, por eso el error es bastante claro.
sequenceOf(canonicalisedInput.lastIndex + 1 downTo 0)
– esta expresión crea una secuencia que consta de un único elemento de IntProgression
.
Si desea convertir un IntProgression
a una Sequence<Int>
, use la function de extensión de asSequence
:
(canonicalisedInput.length downTo 0).asSequence()