Solidity-变量
Solidity 变量名
在为变量命名时,请记住以下规则。
- 不应使用 Solidity 保留关键字作为变量名。例如,
break或boolean变量名无效。 - 不应以数字(0-9)开头,必须以字母或下划线开头。例如,
123test是一个无效的变量名,但是_123test是一个有效的变量名。 - 变量名区分大小写。例如,
Name和name是两个不同的变量。
Solidity 支持三种类型的变量:
- 状态变量 – 变量值永久保存在合约存储空间中的变量。
- 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。
- 全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。
Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型。每个变量声明时,都有一个基于其类型的默认值。没有undefined或null的概念。
状态变量
变量值永久保存在合约存储空间中的变量。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;contract Demo1 {function getResult() public pure returns (uint) {// 这是一行注释,类似于C++中的注释/*** 这是多行注释* 类似于C语言中的注释*/uint a = 1;uint b = 2;uint result = a + b;return result;}
}
contract SolidityTest {uint storedData; // 状态变量constructor() public {storedData = 10; // 使用状态变量}function getResult1() public view returns (uint) {uint a = 1; // 局部变量uint b = 2;uint result = a + b;return result; // 访问局部变量}function getResult2() public view returns (uint) {uint a = 1; // 局部变量uint b = 2;uint result = a + b;return storedData; // 访问状态变量}
}
局部变量
变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。函数参数是局部变量。
实例如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract SolidityTest {uint storedData; // 状态变量constructor() public {storedData = 10; }function getResult() public view returns(uint){uint a = 1; // 局部变量uint b = 2;uint result = a + b;return storedData; // 访问状态变量}
}
全局变量
这些是全局工作区中存在的特殊变量,提供有关区块链和交易属性的信息。
| 名称 | 返回 |
|---|---|
| blockhash(uint blockNumber) returns (bytes32) | 给定区块的哈希值 – 只适用于256最近区块, 不包含当前区块。 |
| block.coinbase (address payable) | 当前区块矿工的地址 |
| block.difficulty (uint) | 当前区块的难度 |
| block.gaslimit (uint) | 当前区块的gaslimit |
| block.number (uint) | 当前区块的number |
| block.timestamp (uint) | 当前区块的时间戳,为unix纪元以来的秒 |
| gasleft() returns (uint256) | 剩余 gas |
| msg.data (bytes calldata) | 完成 calldata |
| msg.sender (address payable) | 消息发送者 (当前 caller) |
| msg.sig (bytes4) | calldata的前四个字节 (function identifier) |
| msg.value (uint) | 当前消息的wei值 |
| now (uint) | 当前块的时间戳 |
| tx.gasprice (uint) | 交易的gas价格 |
| tx.origin (address payable) | 交易的发送方 |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
