En Scala, si j'ai une classe appelée Vector2D
et que je souhaite effectuer des conversions implicites pour cette classe. Actuellement, j'ai cette fonction placée dans le Vector2D
: implicit def fromFloatTuple(tuple: (Float, Float)): Vector2D = new Vector2D(tuple._1, tuple._2)
Fonction d'appel via la fonction implicite dans Scala
Je peux faire ce qui suit avec succès val x: Vector2D = (1f, 1f)
. Cependant, je ne peux pas faire quelque chose comme: val x: Float = (1f, 1f).length()
(évidemment la longueur est définie pour Vector2D). Pourquoi cela ne fonctionne pas, je m'attendrais à ce qu'il soit converti en quelque chose comme val x: Float = fromFloatTuple((1f, 1f)).length()
mais ce n'est pas le cas. Comment puis-je obtenir cet effet dans Scala? Aussi maintenant que j'y pense, comment faire pour que cette fonction accepte d'autres types numériques sans faire de fonction pour chaque combinaison de tous les types numériques (pas un problème avec un vecteur 2D mais assez sale pour un vecteur 4D)).
Bien que ce lien peut répondre à la question, il est préférable d'inclure les éléments essentiels de la réponse ici et de fournir le lien de référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'avis] (/ review/low-quality-posts/16747601) – stevieb
Merci pour les commentaires! –
Cela échoue pour un cas comme '(1f, 1)' car ils sont de types numériques différents. Une solution de contournement serait cependant de déclarer plusieurs arguments génériques. –