Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

140
Vistas
¿Cómo crear una función de extensión con múltiples receptores en Kotlin?

Quiero que mi función de extensión tenga un par de receptores. Por ejemplo, quiero que el handle de función pueda llamar a métodos de instancias de CoroutineScope e Iterable :

 fun handle() { // I want to call CoroutineScope.launch() and Iterable.map() functions here map { launch { /* ... */ } } }

Pensé que esto podría funcionar:

 fun <T> (Iterable<T>, CoroutineScope).handle() {}

Pero me da error:

 Function declaration must have a name

Sé que puedo crear la función con parámetros, pero

¿Es posible tener múltiples receptores para una sola función y cómo hacerlo sin parámetros?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Hasta donde yo sé, actualmente esto es imposible para los tipos que no controlamos. Hay planes para agregar dicha función, se procesa bajo KEEP-259 .

No sé cuál es la hoja de ruta planificada o cuándo podríamos esperar que se agregue, pero espero que veamos al menos algunos adelantos este año.

over 4 years ago · Santiago Trujillo Denunciar

0

Este es un caso muy limitado, pero si su caso de uso es que tiene una función de orden superior en la que desea que el código en la lambda tenga múltiples receptores, y si los tipos que desea combinar son interfaces, puede crear una clase que envuelve las interfaces como delegados. Dentro de la lambda pasada a la siguiente función, puede llamar a las funciones Iterable y CoroutineScope.

 class CoroutineScopeAndIterable<T>( private val coroutineScope: CoroutineScope, private val iterable: Iterable<T> ): CoroutineScope by coroutineScope, Iterable<T> by iterable suspend fun <T> CoroutineScope.runSomething( iterable: Iterable<T>, block: suspend CoroutineScopeAndIterable<T>.() -> Unit ) { CoroutineScopeAndIterable(this, iterable).block() }
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una solución que puede usar:

 val <T> Iterable<T>.handle: CoroutineScope.() -> Unit get() = { map { launch { } } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda