2017-10-07 5 views
0

Maintenant que tuple est juste record en SML, j'ai essayé:conversion entre enregistrement et tuple?

enter image description here

Les codes ci-dessus j'espère que ce disque peut accepter un tuple, mais il signale une erreur. Donc, il n'y a pas de conversion implicite de tuple en enregistrement et d'enregistrement en tuple (bien que je n'ai pas posté ici, j'ai essayé au local en fait).

Ma question est pourquoi SML ne fournit pas une telle conversion? (Parce que ces conversions sont assez fréquentes en C++)

Répondre

1

Tuples sont des dossiers avec les membres nommés 1 à n. Autrement dit, le tuple de trois éléments (a, b, c) est vraiment un enregistrement {1 = a, 2 = b, 3 = c}. Il n'y a donc pas besoin d'une conversion implicite entre les tuples et les enregistrements car ils sont déjà la même chose.

maintenant la fonction que vous avez définie prend un enregistrement avec les membres x, y et z et vous passez un record avec les membres 1, 2 et 3. Cela ne fonctionne pas. Pour que cela fonctionne, il faudrait qu'il y ait une conversion implicite entre les enregistrements avec des noms de membres différents, ce qui semble être une très mauvaise idée.

(parce que ces conversions sont assez fréquentes en C++)

Il n'y a pas de conversions implicites en C++ entre struct ou sans rapport avec les classes avec des membres différents (ou même les mêmes membres). Pour ce faire, vous avez besoin d'un reinterpret_cast (ou d'un pointeur de type C sur l'adresse), ce qui n'est ni courant ni une bonne idée (et ne fonctionnerait qu'avec tout autre type de POD).