4

srml_support::storage::StorageMapfn get()和 和有什么区别fn take()

4

1 回答 1

3

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()底池值来获取应该转移给用户的金额,并将底池重置为“零”。

请注意,此操作会写入存储,因此在运行时调用时,存储会被永久修改。

于 2019-06-25T09:47:08.163 回答