В srml_support :: storage :: StorageMap, в чем разница между get () и take () - PullRequest
3 голосов
/ 25 июня 2019

В srml_support :: storage :: StorageMap , в чем разница между fn get() и fn take()?

1 Ответ

2 голосов
/ 25 июня 2019

get() просто возвращает значение в хранилище:

/// Load the bytes of a key from storage. Can panic if the type is incorrect.
fn get<T: codec::Decode>(&self, key: &[u8]) -> Option<T>;

take() выполняет оба get() для возврата значения, но также kill(), который удаляет ключ из хранилища:

/// Take a value from storage, deleting it after reading.
fn take<T: codec::Decode>(&mut self, key: &[u8]) -> Option<T> {
    let value = self.get(key);
    self.kill(key);
    value
}

Это означает, что после операции take() вы можете позвонить exists(), и он вернет false.

Обычный шаблон, в котором используется take(), - это своего рода выплата пота.,Допустим, в конце какой-то игры победитель получает все средства в банке.Вы должны вызвать take() для значения банка, чтобы получить сумму, которую следует передать пользователю, и сбросить банк до «нуля».

Обратите внимание, что эта операция выполняет запись в хранилище, поэтому при вызовево время выполнения хранилище постоянно изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...