在srml_support::storage::StorageMapfn get()
和 和有什么区别fn take()
?
问问题
68 次
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 回答