Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

138
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda