Biche de Cérynie
2010-02-18 14:33:26 UTC
Bonjour,
Ce groupe semble mort, mais je tente quand même ma chance...
J'essaie de créer des types enregistrement ayant des champs de même
nom, et j'obtiens
des erreurs, par exemple
type a = {x:int; y:int};;
let t = {x=1;y=2};;
type b = {x:int; y:int};;
let u:b = {x=1;y=2};;
let v:a = {x=1;y=2};;
Ici les deux premiers "let" fonctionnent, mais le troisième
me fait une erreur
"Error: This expression has type b but is here used with type a"
soit si je comprends bien, ocaml comprends la valeur {x=1;y=2} comme
un "b",
grâce au typage automatique.
De même, t existe bien, mais si je demande t.x, il me fait cette
fois l'erreur
"Error: This expression has type a but is here used with type b"
c'est-à-dire que le champ x est associé au type b.
Je cherche un moyen de distinguer les champs en indiquant le type.
Il me semble que ça diot être faisable, mais je ne trouve pas...
Dans l'exemple précédant, ça ne sert encore à rien, mais
si je définit un type point2d et un type point3d, la
fonction
let getx p = p.x;;
va attendre une valeur du dernier déclaré des deux (ici un point3d)
Et je ne peux même pas faire
let getx p:point2d = p.x;;
qui génère aussi une erreur.
Quelqu'un aurait-il une idée ?
Ce groupe semble mort, mais je tente quand même ma chance...
J'essaie de créer des types enregistrement ayant des champs de même
nom, et j'obtiens
des erreurs, par exemple
type a = {x:int; y:int};;
let t = {x=1;y=2};;
type b = {x:int; y:int};;
let u:b = {x=1;y=2};;
let v:a = {x=1;y=2};;
Ici les deux premiers "let" fonctionnent, mais le troisième
me fait une erreur
"Error: This expression has type b but is here used with type a"
soit si je comprends bien, ocaml comprends la valeur {x=1;y=2} comme
un "b",
grâce au typage automatique.
De même, t existe bien, mais si je demande t.x, il me fait cette
fois l'erreur
"Error: This expression has type a but is here used with type b"
c'est-à-dire que le champ x est associé au type b.
Je cherche un moyen de distinguer les champs en indiquant le type.
Il me semble que ça diot être faisable, mais je ne trouve pas...
Dans l'exemple précédant, ça ne sert encore à rien, mais
si je définit un type point2d et un type point3d, la
fonction
let getx p = p.x;;
va attendre une valeur du dernier déclaré des deux (ici un point3d)
Et je ne peux même pas faire
let getx p:point2d = p.x;;
qui génère aussi une erreur.
Quelqu'un aurait-il une idée ?