Menu
CoddyTech

读取和写入状态

本课属于 Coddy Solidity 学习旅程的“基础知识”单元。第 27 课,共 53 课。

view 函数可以读取合约状态,但不能更改状态。写入状态的函数不能标记为 view 或 pure。将读取值的 getter 与更改值的 setter 分开,让每个函数的用途都清晰明了。

在合约作用域中声明:

uint256 stored;
function setValue(uint256 n) internal {
    stored = n;
}
function readValue() internal view returns (uint256) {
    return stored;
}

在提供的 main 函数中使用它:

setValue(18);
console.log(readValue());

setValue 会写入共享的存储变量。readValue 属于 view,因为它会返回该变量而不改变它。main 也会通过调用 setValue 间接写入,因此它的函数头没有 view 或 pure 修饰符。

会写入合约状态的函数不能标记为 view。

challenge icon

挑战

简单

声明状态 level、设置函数 setLevel 和 view 查询函数 getLevel。main 必须将 level 设置为传入的 nextLevel,然后打印 getter 的结果。

测试会按以下顺序向 main 传入参数:uint256 nextLevel。每个测试都会从全新的合约状态开始。

使用 console.log 输出所需内容。只打印所需的值,每行一个,除非任务另有说明,否则不要添加额外标签。

亲手试试

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import "forge-std/console.sol";
contract Main {
    function main(uint256 nextLevel) external  {
        // 在这里写下你的答案。
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Solidity 在线编辑器