WEB3 Day3-Solidity基础[part2]

AI-摘要
sonia33 GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
WEB3 Day3-Solidity基础[part2]
SoniaChenWEB3 Day3 — Solidity基础[part2]
存储位置
solidity里面有六种存储位置。
- Calldata
- Memory
- Storage
- Stack
- Code
- Logs
calldata和memory是函数执行期间变量的临时存储位置,calldata只读,用于不可修改的函数输入。
相比之下,memory允许读写访问,使变量能在函数内部被修改。
要修改calldata变量,必须先讲它们加载到memory中。
Calldata
只读的, 比storage更经济,主要用于输入。
下面函数中_name 用calldata关键字,就会收到错误提示,因为不可修改。
Memory
可读可修改,大多数的变量默认自动使用memory,但是字符串不能默认,需要明确指定memory或者calldata
string memory variableName = "someValue";
下面会讲到为什么会这么特殊
storage
存储在storage的变量在区块链上是持久化的,其值在函数调用和交易之间保持不变。
比如下面这个变量 favoriteNumber ,声明在函数外部,会被隐式转换为存储变量。
contract MyContract {
uint256 favoriteNumber; // this is a storage variable
};
⚠️ 同理,在函数内部也不能使用storage,因为函数中的变量都是临时存在。
字符串和基本类型的特殊存储
在Solidity中,string是字节数据,arrays of bytes,在上文中提过需要指定确切的存储位置;
另一方面,uint256基本类型有内置机制,用于规定它们的存储、访问和操作方式及位置。
所以,在函数给uint256指定关键字就会报错
mapping类型
遍历过于消耗资源,所以我们使用mapping结构
mapping (string => uint256) public nameToFavoriteNumber;
🧑💻 Test yourself
- 📕 How does the Solidity compiler handle primitive types and strings in terms of memory management?
- 📕 Why can’t the storage keyword be used for variables inside a function?
- 🧑💻 Write a smart contract that uses storage, memory and calldata keywords for its variables.
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果