Question sur les tableaux dynamiques

Donut

Question sur les tableaux dynamiques


Je joue actuellement avec Solidity et les tableaux dynamiques. J’ai le code suivant:

 contract Test { int256 []   public  test ; 

     function  setTest ( int256 b )   public { test . push ( b ); 
     } 

     function  setTest2 ( uint256 a ,  int256 b )   public   { test [ a ]   =  b ; 
     } 
 } 

J’ai exécuté le code en remix. Lorsque j’appelle setTest (1) et que j’appelle le test getter (0), la sortie est 1. Si je fais de même avec setTest2 (0, 1) et que j’appelle ensuite le getter, la valeur ne semble pas être enregistrée. Je ne comprends pas pourquoi. Quelqu’un pourrait-il expliquer ce qui se passe ici?

Merci d’avance.


J’ai réalisé que ma question n’est pas vraiment claire et je vais la poser ici et cette fois plus clairement. Merci pour les autres réponses déjà.

J’appelle la fonction setTest2(0, 1) et j’appelle ensuite le getter, le remix me montre que la valeur à la position 0 est 0 et non 1. Lorsque j’appelle la fonction setTest(2) et que j’appelle ensuite le getter, la valeur 2 est à la position 0 du tableau et non à la position 1. Cela signifie que la valeur du premier appel n’a pas été enregistrée. Pourquoi?

Eli Drion

Si vous appelez setTest2(0,1) sur un tableau d’une longueur de 0, cela ne fonctionnera pas.

Donut

Sa longueur est 0? Comment venir? Est-ce quelque part dans les documents? Je ne le trouve pas …

Eli Drion

Si vous n’avez rien poussé auparavant, oui, votre tableau est vide, et essayer de définir une valeur quelle que soit la position échouera

Réponses


 Tshy

Lorsque vous utilisez des tableaux dynamiques, vous ne pouvez pas utiliser DynamicArray [a] = b, si la position a n’est pas encore remplie par la fonction push. S’il s’agissait d’un tableau statique, cela fonctionnerait.


 Eli Drion

Lorsque vous appelez setTest(1) , votre tableau contient 1 à la position 0 . Après cela, vous appelez setTest2(0,1) , qui définit à la position 0 la valeur 1 .

La valeur est la même, vous ne remarquerez donc aucune différence. Si vous appelez setTest2(0,5) , vous verrez que ce sera différent.

Donut

Merci et c’est logique. J’ai réalisé que ma question ne couvrait pas la question initiale. Je l’ai édité.


 Fischa7

Concernant votre montage.
Je viens de vérifier et il semble que l’appel de setTest() sur une position du tableau, qui n’a pas été initialisé auparavant, ne fonctionne pas. Donc, en d’autres termes, vous pouvez l’utiliser pour modifier une valeur, mais pas en ajouter une nouvelle.
C’est pourquoi votre setTest() commence toujours au début. Vous devez d’abord pousser un nouvel élément vers une position pour que setTest2() ait un effet.

Donut

Oui, vous avez raison et cela a du sens. J’ai réalisé que ma question ne couvrait pas la question initiale. Je l’ai édité.

 

(question, dynamiques, Les, sur, tableaux

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *