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);
}
Wenn ein Käufer nicht in der Käuferzuordnung erfasst wird, wird der KäuferNum ++; aber ich weiß nicht, wie ich feststellen kann, ob sich ein Käufer im Mapping befindet
Sie können die Variable none
erstellen, um sie als NULL
zu verwenden:
uint80 constant None = uint80(0);
Grundsätzlich ist jede Variable standardmäßig auf 0
gesetzt.
Sie sollten an mappings
denken, da alle möglichen - Kombinationen standardmäßig auf 0
gesetzt sind.
In Ihrem speziellen Fall würde ich Folgendes verwenden:
if (buyers[msg.sender].amount == 0)
Nichts ist null
in der Solidität.
Überprüfen Sie einfach die Länge der Adresse:
if(buyers[msg.sender].length == 0){
// do your thing
}
Siehe auch diese Antwort zum Ethereum-Stack-Austausch .
Wie Viktor sagte, ist der Standardwert für alle möglichen Werte im Mapping null. Wenn also buyer
noch nicht in das Mapping eingefügt wurde, ist der amount
-Wert für diesen address
Null. Dieser Ansatz hat jedoch einen Fehler. Wenn ein buyer
existiert, aber nach einigen Operationen sein Kontostand zu Null wurde, werden Sie ihn so behandeln, als wäre er nicht vorhanden.
Ich denke, der beste Ansatz ist, ein exists
-Mitglied zur buyer
-Struktur mit dem bool
-Typ hinzuzufügen. Der Standardwert für dieses Mitglied ist false
. Wenn der Käufer erstellt wird, initialisieren Sie ihn mit dem Wert true
. So können Sie über dieses Mitglied genau prüfen, ob ein Käufer existiert oder nicht.
Käufer Struktur:
struct buyer{
uint amount;
Status status;
bool exists;
}
Käufer initialisieren:
buyer memory b = buyer(0, status, true);
Prüfen Sie, ob ein Käufer existiert:
if(buyers[msg.sender].exists) {
//so can buy
}
Anstatt einen der Werte zu verwenden oder einen zusätzlichen Booleschen Wert zu erstellen, können Sie die Bytegröße der Struktur überprüfen.
if( bytes( buyers[msg.sender] ).length > 0 ) {
// buyer exists
}