3 votes

Comment comparer des valeurs de type générique ?

Considérons un tel code :

fun equals(a : 'a,b : 'a) =
  a = b;

Mon code est plus gros, mais c'est le problème. SML rapporte "Error : operator and operand don't agree".

Je suis un débutant complet avec SML, et je n'ai aucune idée de la raison pour laquelle il se plaint. Est-ce quelque chose de similaire au problème du C#, où l'on ne peut pas vraiment comparer deux valeurs de n'importe quel type, mais où l'on doit utiliser le comparateur d'égalité par défaut pour le type ? Devrais-je ajouter une contrainte sur 'a (J'espère l'avoir écrit correctement comme type générique) ?

10voto

Tayacan Points 1866

Au lieu de 'a utiliser ''a .

Un type précédé de deux guillemets au lieu d'un est un type d'égalité, ce qui signifie que l'option = L'opérateur y travaille. Cela signifie également que vous ne pouvez pas appeler votre fonction sur des choses qui ne sont pas des types d'égalité, cependant.

De plus, vous n'avez pas besoin d'écrire les types. Si vous le faites simplement :

fun equals (a,b) = a = b;

SML déduira le type.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X