区块链:Solidity值类型(Solidity 枚举Enums & 结构体Structs)

博客围绕区块链展开,介绍了枚举(Enums)和结构体(Structs)。枚举在不同数量时类型会有变化,在特定方法中传入值有相应规则。结构体可自定义,能存放任意类型值,还介绍了初始化结构体状态变量的两种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举Enums

案例

pragma solidity ^0.4.4;

contract test {
    enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }
    ActionChoices _choice;
    ActionChoices constant defaultChoice = ActionChoices.GoStraight;

    function setGoStraight(ActionChoices choice) public {
        _choice = choice;
    }

    function getChoice() constant public returns (ActionChoices) {
        return _choice;
    }

    function getDefaultChoice() pure public returns (uint) {
        return uint(defaultChoice);
    }
}

ActionChoices就是一个自定义的整型,当枚举数不够多时,它默认的类型为uint8,当枚举数足够多时,它会自动变成uint16,下面的GoLeft == 0,GoRight == 1, GoStraight == 2, SitStill == 3。在setGoStraight方法中,我们传入的参数的值可以是0 - 3当传入的值超出这个范围时,就会中断报错

结构体Structs

自定义结构体
pragma solidity ^0.4.4;

contract Students {

    struct Person {
        uint age;
        uint stuID;
        string name;
    }

}

Person就是我们自定义的一个新的结构体类型,结构体里面可以存放任意类型的值。

初始化一个结构体

初始化一个storage类型的状态变量。

  • 方法一
pragma solidity ^0.4.4;

contract Students {

    struct Person {
        uint age;
        uint stuID;
        string name;
    }

    Person _person = Person(18,101,"wt");

}
  • 方法二
pragma solidity ^0.4.4;

contract Students {

    struct Person {
        uint age;
        uint stuID;
        string name;
    }
    Person _person = Person({age:18,stuID:101,name:"wt"});
}

初始化一个memory类型的变量。

pragma solidity ^0.4.4;

contract Students {

    struct Person {
        uint age;
        uint stuID;
        string name;
    }

    function personInit() {

        Person memory person = Person({age:18,stuID:101,name:"liyuechun"});
    }
}
Solidity中,数据类型是定义变量或函数参数所允许的数据结构。Solidity支持多种数据类型,包括但不限于: 1. **基础类型(Base Types)**: - **整数类型(Integers)**:`byte`, `short`, `int`, `uint8`, `uint16`, `uint24`, `uint32`, `uint64`, `uint256`。`int` 和 `uint` 分别代表有符号和无符号整数。 - **固定长度字符串(Fixed-Length Strings)**:`string`,例如 `string[10]` 表示最多包含10个字符的字符串。 - **地址类型(Address)**:`address`,代表以太坊账户地址。 - **布尔类型(Boolean)**:`bool`,用于存储真(true)和假(false)。 2. **数组(Arrays)**:`[]type`,用于表示动态大小的一维数组,比如 `[uint]` 或 `string[]`。 - **映射(Mappings)**:`mapping(keyType => valueType)`,类似于字典,通过键(keyType)查找对应的值(valueType)。 3. **结构体Structs)**:`struct Name { ... }`,定义自定义的数据结构,可以包含多个字段。 4. **枚举Enums)**:`enum Type { Variant1, Variant2, ... }`,定义一组命名的常量。 5. **外部类型(External Types)**:用于引用合约内的结构体或函数,比如 `contractName.Type`。 6. **内存(Memory)**:`memory` 前缀用于声明需要在函数调用栈上分配内存的变量。 7. **只读(Const)**:`const` 前缀标记一个变量在赋值后不能被改变。 8. **元组(Tuples)**:从Solidity v0.8.0开始,引入了元组类型,用于一次性返回多个值。 每个数据类型都有其特定用途,并影响到变量的存储位置、效用和可能的操作。了解这些类型有助于更好地组织和管理智能合约中的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值