🔮 Solidity变量指南:探寻状态、局部和全局三界之秘🌌
在Solidity的神秘大陆上,变量就像是散落在时间和空间中的宝石💎,每颗都有它独特的魔力和作用域。掌握这三种变量,是成为合约法师的重要一步。
### 1️⃣ 状态变量(State Variable)—— 链上的恒星⭐️
- 定义:状态变量就像是树根一样植根于区块链的土壤中。它们是合约结构中的常青树,坚如磐石。
- 特点:在合约的任何角落,它们都迸发着光彩,但每次变动都会激起Gas的波涛。
- 示例:
contract Variables {uint public x = 1; // 这些是我坚不可摧的状态变量;// ...}
### 2️⃣ 局部变量(Local Variable)—— 函数的幻影🎩
- 定义:函数的暗影战士,行动迅速,随着函数的消逝而灰飞烟灭。
- 特点:它们敏捷地舞动在内存中,不留痕迹,经济又高效,消耗的Gas少之又少。
- 示例:
function bar() external pure returns (uint) {uint xx = 1; // 局部变量,我来了又走,短暂如梦;// ...}
### 3️⃣ 全局变量(Global Variable)—— 世界之窗🌎
- 定义:这是Solidity提供的巫术工具,智者的知识,通往区块链世界的钥匙。
- 特点:如同星空中的指南针,指示交易和区块的秘密。它们毫无寒意,随手可得,无须任何祭品。
- 示例:
function global() external view returns (address, uint, bytes memory) {address sender = msg.sender; // 全局变量,透露着宇宙的奥秘;// ...}
- 常用全球魔法:
- blockhash(uint blockNumber):揭示区块的秘密符文;
- block.coinbase:矿工的藏宝图;
- block.number:历史的卷轴;
- msg.sender:召唤师的真名;
- ...以及更多。
掌握状态、局部和全局变量,就如同握住Solidity魔法棒,数据在你手中轻盈舞动,合约编织着高效和安全的双重保障。在智能合约的编程艺术中,这些变量成就了你管理和操控数据的力量。
pragma solidity ^0.8.0;contract Variables {// 1. 状态变量(State Variable)uint public x = 1;uint public y;string public z;// 2. 局部变量(Local Variable)function bar() external pure returns (uint) {uint xx = 1;uint yy = 3;uint zz = xx + yy;return zz;}// 3. 全局变量(Global Variable)function global() external view returns (address, uint, bytes memory) {address sender = msg.sender;uint blockNum = block.number;bytes memory data = msg.data;return (sender, blockNum, data);}// 修改状态变量的函数function foo() external {x = 5;y = 2;z = "0xAA";}
}