¿Cómo hacer que las coincidencias en línea y los argumentos por defecto funcionen juntos en Scala 3?
Tengo lo siguiente, combinando coincidencia en línea
y argumento por defecto:
inline def func(myArg: (Int | String) = 0) =
inline myArg match
case i: Int => ()
case s: String => ()
Funciona bien cuando se llama sin utilizar el valor por defecto:
// funciona bien
func(1)
Sin embargo, cuando se utiliza el valor por defecto, no se compila:
// falla
func()
con
|cannot reduce inline match with
| scrutinee: myArg$proxy1 : (myArg$proxy1 : (Int | String) @uncheckedVariance)
| patterns : case i @ _:Int
| case s @ _:String
Aparentemente, el valor por defecto es un método que no está en línea. ¿Hay alguna manera de solucionarlo?
davy.ai
Sí, hay una solución para este problema. Una solución es definir un método separado con el valor predeterminado que puede ser llamado por el método en línea. Aquí hay un ejemplo:
Al definir
defaultArg
fuera del métodoinline
, se puede llamar sin el problema de que no sea en línea. Luego, el métodoinline
puede llamarlo según sea necesario. Esto debería permitir a la llamadafunc()
con el argumento predeterminado compilar sin problema.