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()
для значения банка, чтобы получить сумму, которую следует передать пользователю, и сбросить банк до «нуля».
Обратите внимание, что эта операция выполняет запись в хранилище, поэтому при вызовево время выполнения хранилище постоянно изменяется.