Нуль, как вещь в солидарности

    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);

 }

Если покупатель не зарегистрирован в сопоставлении покупателя, то buyerNum++; но я не знаю, как определить, находится ли покупатель в картировании

Ответ 1

В прочности каждая переменная по умолчанию установлена ​​на 0.

Вы должны думать о mappings , поскольку по умолчанию все возможные комбинации установлены на 0.

В вашем конкретном случае я бы использовал следующее:

if (buyers[msg.sender].amount == 0)

Ответ 2

Вы не могли бы создать none переменную, чтобы использовать ее как NULL:

uint80 constant NULL = uint80(0);

Ответ 4

Как сказал Виктор, значение по умолчанию для всех возможных значений в отображении равно нулю. Таким образом, если buyer еще не вставил в отображение, значение amount для этого address будет равно нулю. Но у этого подхода есть недостаток: если buyer существует, но его баланс стал нулевым после некоторых операций, вы будете относиться к нему как к не существующему.

Я думаю, что лучший подход, чтобы добавить exists элемент к buyer структуре с bool типа. Значение по умолчанию для этого элемента - false и когда покупатель создается, вы инициализируете его true значением. Таким образом, вы можете точно проверить, существует ли покупатель через этого участника.

Структура покупателя:

struct buyer{
   uint amount;
   Status status;
   bool exists;
}

Инициализировать покупателя:

buyer memory b = buyer(0, status, true);

Проверьте, существует ли покупатель:

if(buyers[msg.sender].exists) {
  //so can buy
}

Ответ 5

Вместо использования одного из значений или создания дополнительного логического значения вы можете проверить размер структуры в байтах.

if( bytes( buyers[msg.sender] ).length > 0 ) {
    // buyer exists
}