Move Resource 取出和销毁
函数 move_from
用来将 Resource 从账户下取出。
我们将实现 destroy
函数,将 Collection
的 T
Resource 从账户取出并且销毁它的内容。
// modules/Collection.move module Collection { // ... skipped ... public fun destroy(account: &signer) acquires Collection { // account no longer has resource attached let collection = move_from<Collection>(Signer::address_of(account)); // now we must use resource value - we'll destructure it // look carefully - Items must have drop ability let Collection { items: _ } = collection; // done. resource destroyed } }
Resource 必需被使用。因此,从账户下取出 Resource 时,要么将其作为返回值传递,要么将其销毁。
但是请记住,即使你将此 Resource 传递到外部并在脚本中获取,接下来能做的操作也非常有限。
因为脚本上下文不允许你对结构体或 Resource 做任何事情,除非 Resource 模块中定义了操作 Resource 公开方法,否则只能将其传递到其它地方。
知道这一点,就要求我们在设计模块时,为用户提供操作 Resource 的函数。
move_from
函数签名:
native fun move_from<T: key>(addr: address): T;