Solidity中如何判斷mapping中某個鍵是否為空呢?
阿新 • • 發佈:2018-12-14
Solidity中如何判斷mapping中某個鍵是否為空呢?
一.比較標準的做法是建立一個專門和value相關的結構體,用一個布林型變數來看是否這個key所對應的value被賦過值
程式碼如下:
pragma solidity ^0.4.19; contract UserTest { struct User{ string name; bool isVaild; } mapping(address => User) public users; function addUser(string _name) public returns (string) {if(users[msg.sender].isVaild){ return users[msg.sender].name; } users[msg.sender].name = _name; users[msg.sender].isVaild = true; return users[msg.sender].name; } function deleteUser() public returns (bool) { if(users[msg.sender].isVaild){ users[msg.sender].name= ''; users[msg.sender].isVaild = false; return true; } return false; } function getUser() public constant returns (string, bool) { return (users[msg.sender].name, users[msg.sender].isVaild); } }
二.也可以簡單的來看一下value所對應的length來判斷這個值是否被賦值過(零值無法判斷!)【實際上我在測試過程中這種方式一直報編譯錯誤】
mapping(address => uint) public deposits; if(deposits[msg.sender].length == 0){ // deposit[msg.sender] is empty, do your thing }
如果我們不用判斷某個變數是否為賦過值後的零值時,我建議用第二種通過length來判斷的方法,因為後者將大大減少合約gas的消耗。但實際上我在測試過程中這種方式一直報編譯錯誤
參考文章:https://ohyoukillkenny.github.io/blog/2018/01/07/null-in-solidity/