一、枚举类型

枚举是Solidity中用户自定义的类型之一。 使用enum关键字,并且要求至少有一个枚举值。 如下, EmptyEnum会编译不通过。 enum不是ABI支持的原生数据类型,所以在输入输出接口中, enum在编译后会被转换为无符号整数(uint8)。

contract TestEnum {    

	// 这个编译不通过, 
	// 提示 ParserError: enum with no members is not allowed.
	// 枚举类型定义必须至少有一个枚举值。 
	// enum EmptyEnum {} 
	
	//定一个货币枚举值;
	enum Currency {
	    RMB, 
	    USD, 
	    JPY, 
	    EUR 
	    
	}
	
	function examples() public pure returns (Currency, Currency, Currency, uint8) {
	    Currency defaultCurrency;
	    Currency initVar = Currency.JPY;
	    Currency int2Enum = Currency(2);
	    uint8 enum2Int= uint8(Currency.EUR);
		return (defaultCurrency, initVar, int2Enum, enum2Int);
	} 
}
 

返回值:

0: uint8: 0
1: uint8: 2
2: uint8: 2
3: uint8: 3

但在使用中, 枚举不会自动转换为uint,需要显式转换, 如uint8(Currency.EUR)。 这个转换, 是按照定义的顺序,第一个枚举值转换为0,第二个为1…以此类推。


感谢您对本文的关注,如果您对区块链技术有兴趣,可以加入我们一起探讨, 请扫码关注“可可链”的微信公众号,并留言“加入可可链”。

本文欢迎转载,转载时请注明本文来自 微信公众号“可可链”。