struct buyer{
uint amount;
Status status;
}
mapping(address=>buyer) public buyers;
mapping(uint=>address) buyerIndex;
uint public buyerNum;
//Order a product.
function(){
uint doubleValue=value*2;
uint amount=msg.value/doubleValue;
if(buyers[msg.sender]==null){ //Error in this line
buyer abuyer=buyer({amount:amount,status:Status.Created}); //Error in this line
buyerNum++;
buyerIndex[buyerNum]=msg.sender;
buyers[msg.sender]=abuyer;
}else{
buyers[msg.sender].amount+=amount;
}
Order(msg.sender,amount*doubleValue,amount);
}
Si un acheteur n'est pas enregistré dans le mappage acheteur, alors customerNum ++; mais je ne sais pas comment dire si un acheteur est dans la cartographie
Vous pouvez créer la variable none
pour l'utiliser en tant que NULL
:
uint80 constant None = uint80(0);
En solidité, chaque variable est définie sur 0
par défaut.
Vous devriez penser à mappings
car toutes les combinaisons possibles sont définies par défaut sur 0
.
Dans votre cas spécifique, j'utiliserais les éléments suivants:
if (buyers[msg.sender].amount == 0)
Il n’ya rien de tel que null
en solidité.
Il suffit de vérifier la longueur de l'adresse:
if(buyers[msg.sender].length == 0){
// do your thing
}
Voir aussi cette réponse sur l’échange de piles Ethereum .
Comme l'a dit Viktor, la valeur par défaut pour toutes les valeurs possibles du mappage est zéro. Donc, si un buyer
n'a pas encore été inséré dans le mappage, la valeur amount
pour ce address
sera zéro. Mais cette approche a un défaut: si un buyer
existe mais que son solde est devenu nul après quelques opérations, vous le traiterez comme s'il n'existait pas.
Je pense que la meilleure approche consiste à ajouter un membre exists
à la structure buyer
avec le type bool
. La valeur par défaut de ce membre est false
et lorsque l'acheteur est créé, vous l'initialisez avec la valeur true
. Vous pouvez donc vérifier avec précision si un acheteur existe ou non via ce membre.
Structure de l'acheteur:
struct buyer{
uint amount;
Status status;
bool exists;
}
Initialiser l'acheteur:
buyer memory b = buyer(0, status, true);
Vérifiez si l'acheteur existe:
if(buyers[msg.sender].exists) {
//so can buy
}