|
Structure et inférence de type |
Iniciado por JLV, 09,abr. 2020 10:33 - 6 respuestas |
| |
| | | |
|
| |
Miembro registrado 4 mensajes |
|
Publicado el 09,abril 2020 - 10:33 |
Bonjour,
Lorsque j'utilise l'inférence de type avec une variable structure le type de la nouvelle variable (stNewPersonne) est bien déduit du paramètre servant de référence stPersonne (et la valeur de stPersonne est copiée dans la nouvelle variable) mais et c'est la que se situe mon problème la valeur de la nouvelle variable (stNewPersonne) est copiée dans le paramètre servant de référence (stPersonne). La procédure ne pourra jamais renvoyer VRAI. Ce comportement ne semble pas correspondre à la description de l'aide sur l'inférence de type (https://doc.pcsoft.fr/fr-FR/?3087003&3087003)
"Lors d'une affectation par référence, la valeur de la variable de référence n'est pas copiée dans la nouvelle variable mais la nouvelle variable pointe sur la variable de référence. Dans ce cas, si la variable qui sert de référence est modifiée, la nouvelle variable est aussi modifiée."
Avez-vous déjà rencontré ce problème et comment l'avez-vous résolu ?
Merci d'avance
code appelant :
//structure STPersonne est une Structure sNom est une chaîne FIN
//variable et initialisation stClient est une STPersonne stClient.sNom = "DUPOND"
//appel procedure RENVOYER NewPersonne(stClient)
procedure :
PROCÉDURE NewPersonne(stPersonne)
soit stNewPersonne <- stPersonne stNewPersonne.sNom = "DURAND"
SI stNewPersonne.sNom <> stPersonne.sNom ALORS RENVOYER Vrai SINON RENVOYER Faux FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 394 mensajes Popularité : +13 (13 votes) |
|
Publicado el 09,abril 2020 - 14:23 |
Bonjour,
> (et la valeur de stPersonne est copiée dans la nouvelle variable)
Je pense qu'il y a confusion. Vous utilisez l'opérateur "<-", vous faites donc une affectation par référence. Comme l'indique la documentation, Il n'y a pas de copie des valeurs de stPersonne dans stNewPersonne : les deux font référence à la même plage mémoire. Par conséquent, si vous modifiez une valeur dans cette plage mémoire, les deux variables sont affectées.
Si vous souhaitez que stNewPersonne ait le même type que stPersonne, mais sa propre plage de mémoire, faites une affectation par copie, avec l'opérateur "<=".
Vous pouvez vous référer également à cette page pour la différence entre les différents opérateurs d'affectation : https://doc.pcsoft.fr/fr-FR/?1515003 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
Publicado el 09,abril 2020 - 15:59 |
Merci Benjamin Je comprend un peu mieux mon problème ... mais l'affectation par copie n'y répond pas en effet (après test) pour que je puisse faire une affectation par copie de stNewPersonne il faut que je déclare DANS la procédure que stNewPersonne est une STPersonne avant de faire stNewPersonne <= stPersonne. Windev n'accepte pas " soit stNewPersonne <= stPersonne ". |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 509 mensajes Popularité : +18 (18 votes) |
|
Publicado el 09,abril 2020 - 18:44 |
Bonjour, Dans le cas de l'inférence de type, l'affectation par copie est l'opérateur " = " . J'ai réalisé un test avec un type structure et, à l'exécution, le type de structure est bien "inféré" pour la nouvelle variable.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 09,abril 2020 - 22:19 |
J'ai déjà eu quelques soucis avec inférence de type ... Alors je code à l'ancienne
Fonction NewPersonne(p_stPersonne est une STPersonne) : boolean Local stPersonne est une STPersonne = p_stPersonne stNewPersonne est une STPersonne bResult est un boolean = faux
stNewPersonne.sNom = "DURAND"
SI stNewPersonne.sNom <> stPersonne.sNom ALORS bResult = Vrai Renvoyer(bResult) |
| |
| |
| | | |
|
| | |
| |
Publicado el 09,abril 2020 - 22:20 |
J'ai déjà eu quelques soucis avec inférence de type ... Alors je code à l'ancienne
Fonction NewPersonne(p_stPersonne est une STPersonne) : boolean Local stPersonne est une STPersonne = p_stPersonne stNewPersonne est une STPersonne bResult est un boolean = faux
stNewPersonne.sNom = "DURAND"
SI stNewPersonne.sNom <> stPersonne.sNom ALORS bResult = Vrai Renvoyer(bResult) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
Publicado el 10,abril 2020 - 08:19 |
=JBO= a écrit :
Bonjour, Dans le cas de l'inférence de type, l'affectation par copie est l'opérateur " = " . J'ai réalisé un test avec un type structure et, à l'exécution, le type de structure est bien "inféré" pour la nouvelle variable.
Merci JBO, c'est effectivement ça Et merci aussi autres contributeurs |
| |
| |
| | | |
|
| | | | |
| | |
|