Puisque vous définissez A
sans limites et sans informations supplémentaires, il pourrait être tout type et aucun type Scala ne possède un +
donc cela ne peut pas compiler.
Le message d'erreur est le résultat de la tentative du compilateur de convertir implicitement x
en une chaîne (parce que la chaîne a un +
et chaque type peut être converti en chaîne de caractères à l'aide de la méthode toString
), mais cela échoue parce que y
n'est pas une chaîne.
Pour créer une méthode pour tous les types numériques, vous pouvez utiliser l'option Numeric
type :
def add[A](x:A, y:A)(implicit n: Numeric[A]): A = {
n.plus(x, y)
}
add(1, 3)
add(1.4, 3.5)
EDIT : ou une syntaxe équivalente :
def add[A: Numeric](x:A, y:A): A = {
implicitly[Numeric[A]].plus(x, y)
}