Tengo un pequeño problema en Scala con un problema de tipeo. En Haskell, puedo hacer esto:Scala Typing: cómo asegurar el tipo numérico
add :: (Num a) => (a,a) -> (a,a) -> (a,a)
De esa manera, se puede echar en add
cualquier tipo que sea un valor numérico y soportes +
etc. quiero lo mismo para una clase Scala, así:
case class NumPair[A <: Numeric](x: A, y: A)
Pero eso no parece funcionar. Pero debido a la Scala Docs, Numeric[T]
es el único rasgo que permite estas operaciones, y parece ser ampliado por Int
, etc. Float
Algún consejo?
No estoy seguro de si me gustaría 'implícitos': son bastante agradables si quieres guardar el trabajo, pero a menudo destruyen el sistema de escritura al oscurecer el tipo de inferencia. – Lanbo
¿De qué manera implicaría una inferencia de tipo oscura? - Si lo desea, puede hacer que la instancia 'Numeric' sea un parámetro explícito, pero siempre tendrá que pasarlo explícitamente, lo que es realmente redundante para tipos como' Int', 'Float', etc. Con implicits, usted tiene la opción de si desea pasarlo explícitamente o no. – Madoc