Solidity中_createZombie函数内uint id生成僵尸ID的原理解析
解释_createZombie函数中僵尸唯一ID的生成逻辑
先拆解这条核心语句的运行逻辑:
uint id = zombies.push(Zombie(_name, _dna, 1, uint32(now + cooldownTime), 0, 0)) - 1;
zombies.push(...)的作用与返回值zombies是存储Zombie结构体的动态数组,Solidity中动态数组的push方法会把新创建的Zombie实例追加到数组末尾,同时返回添加元素后数组的总长度。通过数组长度减1得到唯一ID
Solidity数组的索引从0开始计数:
- 数组为空时,第一次
push后长度变为1,减1得到0,这就是第一个僵尸的ID; - 第二次
push后长度变为2,减1得到1,是第二个僵尸的ID; - 以此类推,每次新僵尸对应的数组索引都是
当前数组长度-1,而数组长度只会随push操作递增,不会重复,所以这个索引值能保证是每个僵尸的唯一标识。
- 唯一性的保障
这段代码中zombies数组只会通过push追加元素,没有插入、删除已有元素的逻辑,因此每个僵尸对应的索引永远不会重复,自然成为唯一ID。
内容的提问来源于stack exchange,提问作者Anurag singh
相关产品推荐
相关产品推荐

