Solidity - 变量
Solidity 支持三种类型的变量。
状态变量 − 其值永久存储在合约存储中的变量。
局部变量 − 其值在函数执行之前一直存在的变量。
全局变量 − 全局命名空间中存在特殊变量,用于获取有关区块链的信息。
Solidity 是一种静态类型语言,这意味着需要在声明时指定状态或局部变量类型。 每个声明的变量始终具有基于其类型的默认值。 不存在"未定义"或"null"的概念。
状态变量
其值永久存储在合约存储中的变量。
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // State variable constructor() public { storedData = 10; // Using State variable } }
局部变量
其值仅在定义它的函数内可用的变量。 函数参数始终是该函数的本地参数。
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // State variable constructor() public { storedData = 10; } function getResult() public view returns(uint){ uint a = 1; // local variable uint b = 2; uint result = a + b; return result; //access the local variable } }
示例
pragma solidity ^0.5.0; contract SolidityTest { uint storedData; // State variable constructor() public { storedData = 10; } function getResult() public view returns(uint){ uint a = 1; // local variable uint b = 2; uint result = a + b; return storedData; //access the state variable } }
使用 Solidity First 应用 章节中提供的步骤运行上述程序。
输出
0: uint256: 10
全局变量
这些是存在于全局工作区中的特殊变量,提供有关区块链和交易属性的信息。
名称 | 返回 |
---|---|
blockhash(uint blockNumber) returns (bytes32) | 给定区块的哈希值 - 仅适用于 256 个最新区块(不包括当前区块) |
block.coinbase (address payable) | 当前区块矿工地址 |
block.difficulty (uint) | 当前区块难度 |
block.gaslimit(uint) | 当前区块gaslimit |
block.number (uint) | 当前区块号 |
块.timestamp(uint) | 当前区块时间戳(自unix纪元以来的秒数) |
gasleft() returns (uint256) | Remaining gas |
msg.data (bytes calldata) | Complete calldata |
msg.sender (address payable) | 消息发送者(当前呼叫者) |
msg.sig (bytes4) | calldata 的前四个字节(函数标识符) |
msg.value(uint) | 随消息发送的wei数 |
now (uint) | 当前区块时间戳 |
tx.gasprice (uint) | 交易的 Gas 价格 |
tx.origin (address payable) | 交易发送者 |
Solidity 变量名称
在 Solidity 中命名变量时,请记住以下规则。
您不应使用任何 Solidity 保留关键字作为变量名称。 这些关键字将在下一节中提到。 例如,break 或 boolean 变量名称无效。
Solidity 变量名称不应以数字 (0-9) 开头。 它们必须以字母或下划线字符开头。 例如,123test 是无效变量名称,但 _123test 是有效变量名称。
Solidity 变量名称区分大小写。 例如,Name 和 name 是两个不同的变量。