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:

"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?

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() 
  • La aplicación onCreate no se llama para las comstackciones de producción
  • Kotlin - Carácter de alimentación de formulario - Escape ilegal: '\ f'
  • ClassCastException con el método bindService de ServiceTestRule
  • Anulación accidental: las siguientes declaraciones tienen la misma firma de JVM
  • Cómo convertir String array a Int array en Kotlin?
  • Genéricos reificados en Scala 2.10
  • cómo configurar kotlin-logging logger
  • Poner elemento en HashMap con interfaz de map
  • Kotlin JPA encapsula OneToMany
  • Delegación de Kotlin a expresión en lugar de reference fija
  • ¿A los miembros protegidos no se puede acceder en las funciones de extensión?