solidity 是一门静态类型语言,和常见的静态类型语言有go、Java类似,需要在编码时为每个变量(本地或状态变量)指定类型。
1.类型分类
Solidity 类型分为以下三种:
1.值类型(Value Types):
- 布尔类型(Booleans)
- 整型(Integers)
- 定长浮点型(Fixed Point Numbers)
- 定长字节数组(Fixed-size byte arrays)
- 有理数和整型常量(Rational and Integer Literals)
- 字符串常量(String literals)
- 十六进制常量(Hexadecimal literals)
- 枚举(Enums)
- 函数类型(Function Types)
- 地址类型(Address)
- 地址常量(Address Literals)
- 用户定义值类型
2.引用类型(Reference Types):
引用类型包括数组 和结构体。
在定义引用类型时,有一个额外属性来标识数据的存储位置,这个属性有:
-
memory(内存): 变量在运行时存在,其生命周期只存在于函数调用期间。
-
storage(存储):保存状态变量,只要合约存在就一直保存在区块链中。
-
calldata(调用数据):用来存储函数参数的特殊数据位置,用来接收外部数据,是一个不可修改的、非持久的函数参数存储区域。
记住一个规则:不同引用类型在进行赋值的时候,只有在不同的数据位置赋值时会进行一份拷贝,而在同一数据位置内通常是增加一个引用。
不同的数据位置的gas(以太坊区块链的交易费用代币:)消耗时不一样的:
- 存储(storage)会在永久保存合约状态变量,开销最大。
- 内存(memory)仅保存临时变量,函数调用之后释放,开销很小。
- 调用数据(calldata) 最便宜。
3.映射类型(Mapping Types)
映射类型和Java的Map、go的map集合t在功能上差不多,它是一种键值对的映射关系存储结构,定义方式为mapping(KT => KV)。
515

被折叠的 条评论
为什么被折叠?



