局部变量的作用域仅限于定义它们的函数,但是状态变量可以有三种作用域类型。
- Public – 公共状态变量可以在内部访问,也可以通过消息访问。对于公共状态变量,将生成一个自动getter函数。
- Internal – 内部状态变量只能从当前合约或其派生合约内访问。
- Private – 私有状态变量只能从当前合约内部访问,派生合约内不能访问。
学习及测试代码
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;
//变量作用域测试
contract Sutest{
//内部访问
uint public a=30;
uint internal b=10;
function s1() public returns(uint){
a=18;//内部访问
b=2;
return a;
}
}
//外部访问测试
contract caller{
Sutest c1 = new Sutest();
function wbfw() public view returns(uint){
return c1.a();//外部访问
}
}
//派生合约内部访问
contract S2 is Sutest{
uint d;//状态变量
//派生合约内部访问
function ps() public view returns(uint){
return b;
}
//访问状态变量
function getResult() public view returns(uint){
// uint x=1;
// uint y=2;
// uint result=x+y;
return d; // 访问状态变量
}
}