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 mejor forma de manejar instancias de objects múltiples
  • ¿Por qué Gradle construye el código fuente de Kotlin haciendo una pausa de ~ 3 segundos "forzando System.gc ()"?
  • ¿Cómo inyectar con IoC en las funciones de nivel superior de Kotlin? ¿Incluso uso contenedores de IoC?
  • Motivo de la precedencia de los operadores con un tipo en el lado derecho
  • Kotlin: ¿Alinear manualmente una function genérica produce un resultado diferente?
  • ¿Por qué no se permite `return` en el bloque de inicio de Kotlin?
  • ¿Cuál es la magia del editor detrás de las extensiones de Kotlin para Android para Views?
  • Cómo crear variables en el context principal
  • Kotlin Android Studio / IntelliJ "Se puede combinar con la tarea" Advertencia de inspección
  • ¿Cuál es la forma canónica de convertir un array <Byte> a un ByteArray
  • Cómo usar setOnclickListener entre la vista de cuadrícula y la vista de list en kotlin