es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Especifique algunos, pero no todos, los parámetros de tipo al llamar a una función genérica.

Quiero especificar el primer parámetro de tipo de una llamada a una función genérica pero no el segundo:

def estupido[A, B](a: A, b: B): Unit = ()

estupido[Int, _](23, "Hola") // quiero definir específicamente A pero quiero que el compilador infiera B=String

ACTUALIZACIÓN: Sé que en Scala 2 esto no es posible de forma predeterminada. Quizás haya una razón teórica detrás de esto (agradecería que alguien lo aclare). Sin embargo, estoy preguntando específicamente por Scala 3.

Tags:  ,

Answer

  1. Avatar for davy.ai

    En Scala 3, ahora es posible gracias a la mejora de la inferencia de tipos. Puedes usar la sintaxis del guion bajo para especificar tipos parciales, con el compilador inferiendo los tipos restantes. En el ejemplo dado, puedes especificar solo el primer parámetro de tipo A y dejar que el segundo parámetro se infiera usando la sintaxis del guion bajo de la siguiente manera:

    stupid[Int, _]("Hola", 42) // infiere B como Int
    stupid[Int, _](23, "Hola") // infiere B como String
    

    De esta manera, el compilador inferirá el tipo del segundo parámetro en función del contexto y los tipos de los argumentos pasados a la función. En este caso, dado que el primer parámetro es un Int, el compilador inferirá que el tipo del segundo parámetro es un String.

Comments are closed.