美文网首页
[智能合约]:类型03 枚举,结构体和映射

[智能合约]:类型03 枚举,结构体和映射

作者: jea的笔记本 | 来源:发表于2019-02-19 23:50 被阅读0次

    接下来看Solidity剩下的三种变量的类型:枚举,结构体和映射。


    1.枚举

    枚举是一个自定义的整型,有一种给数字赋予名字的感觉。在Solidity中,会根据枚举中元素的个数对应到相应的uint类型。关键字是enum

    contract Struct {
        
        enum Number {Zero, One, Two, Three}
        Number num;
        
        function setNum(Number n) public {
            num = n;
        }
        
        function getNum() view public returns(Number){
            return num;
        }
    }
    

    在上述的例子中:

    • Number相当于一个uint8的整型,因为枚举中个数只有三个,在uint8的范围内。Number中的Zero == 0One == 1Two == 2Three == 3。如果超出了uint8的范围,则对应uint16的整形,以此类推。
    • 使用setNum函数时,传入的值必须是0 ~ 3,这跟我们设置的枚举元素个数是对应的,否则会报错。

    2.结构体

    结构体,是一些状态变量的集合。关键字是struct

    struct Person {
        string name;
        uint age;
    }
        
    Person p = Person({name:"jea", age:19});
    Person p1 = Person("jea",19);
    
    • 其中两种实例化Person的结果是一致的。
      如果采用Person p = Person({name:"jea", age:19});的方法,可以只输入nameage,这意味着,没有输入的值为空。
      如果采用Person p1 = Person("jea",19);的方法,则所有的数据字段都要输入,并且类型也要对应才行。
    • 通过.来访问结构体中的内容。如p.namep1.age

    3.映射

    映射,是key-value的对应关系,也可以称为字典类型。关键字是mapping

    mapping (string => uint) strToUint;
        
    function setMap(string memory _s, uint _u) public {
        strToUint[_s] = _u;
    }
        
    function getMap(string memory _s) view public returns(uint) {
        return strToUint[_s];
    }
    
    • 通过 mapping (typeA => typeB) name;创建,也就是创建typeAtypeB的映射,映射名为name

    • 通过strToUint[_s] = _u;往映射中加入新值。_s为字符串索引,如果映射中没有_s对应的值,则在映射中加入_s,将_s对应的值设置为_u;如果映射中有_s对应的值,将该值修改为_u

    • 通过strToUint[_s]获取_s对应的值。也可以通过这种方法,判断映射中有没有索引_s的存在。

    • 注意,测试的时候,有字符串类型的要加双引号。如下:

    相关文章

      网友评论

          本文标题:[智能合约]:类型03 枚举,结构体和映射

          本文链接:https://www.haomeiwen.com/subject/ueeweqtx.html