编写合约实例-Delete用法

一:delete说明

delete操作符可以用于任何变量,将其设置成默认值0。
如果对动态数组使用delete,则删除所有元素,其长度变为0。
如果对静态数组使用delete,则重置所有索引。
如果对map类型使用delete,什么都不会发生。
但如果对map类型中的一个键使用delete,则会删除与该键相关的值。

二:案例1

pragma solidity ^0.4.20;
contract DeleteDemo1{
    uint public data = 100;
    uint[] public dataArray = [uint(1), 2, 3];
    event e(string _str, uint _u);
    event eArr(string _str, uint[] _u);

    function doDelete(){
        uint x = data;
        e("x", x);
        delete x;
        e("after x", x);

        e("data", data);
        delete data;
        e("after data", data);

        uint[] y = dataArray;
        eArr("y", y);
        delete dataArray;
        eArr("after y", y);
    }
}

三:案例2

pragma solidity ^0.4.20;
contract DeleteDemo2{
    struct MyStruct{
        mapping (uint => uint) myMap;
        uint myAmount;
    }
    uint[] myArray;
    MyStruct myStruct;

    # 被constructor修饰,表示构造函数
    constructor(uint amount, uint key, uint value, uint[] array) public {
        myStruct = MyStruct(amount);
        myStruct.myMap[key] = value;
        myArray = array;
    }
    function reset() public {
        delete myStruct;
        delete myArray;
    }
    function resetmap(uint key) public {
        delete myStruct.myMap[key];
    }
}

猜你喜欢

转载自blog.csdn.net/apple9005/article/details/81836519