Inexistent NULL in Solidity
作者:孔令坤,转载请注明出处
在Solidity中,并没有Null值的存在。所有的变量在初始化后都会被默认为0值。这导致我们在写代码的时候需要多加注意。
比如之前我遇到的enum
:
1 | enum State { Created, Locked, Inactive } |
之后,代码在没有对myState
变量进行赋值的情况下,直接判断:
1 | require(myState == Created.Created); |
所以这个时系统断定判断通过,而且并不会报错。
那么,如何判断mapping
中是否某个键是否”为空”呢?
比较标准的做法是建立一个专门和value相关的结构体,用一个布尔型变量来看是否这个key所对应的value被赋过值,代码如下:
1 | library Library { |
此外,我们也可以简单的来看一下value所对应的length来判断这个值是否被赋值过(零值无法判断!):
1 | mapping(address => uint) public deposits; |
如果我们不用判断某个变量是否为赋过值后的零值时,我建议用第二种通过length来判断的方法,因为后者将大大减少合约gas的消耗。