局部变量的作用域仅限于定义它们的函数,但是状态变量可以有三种作用域类型。
- Public – 公共状态变量可以在内部访问,也可以通过消息访问。对于公共状态变量,将生成一个自动getter函数。
- Internal – 内部状态变量只能从当前合约或其派生合约内访问。
- Private – 私有状态变量只能从当前合约内部访问,派生合约内不能访问。
示例
pragma solidity ^0.5.0; contract C { uint public data = 30; uint internal iData= 10; function x() public returns (uint) { data = 3; // 内部访问 return data; } } contract Caller { C c = new C(); function f() public view returns (uint) { return c.data(); // 外部访问 } } contract D is C { uint storedData; // 状态变量 function y() public returns (uint) { iData = 3; // 派生合约内部访问 return iData; } function getResult() public view returns(uint){ uint a = 1; // 局部变量 uint b = 2; uint result = a + b; return storedData; // 访问状态变量 } }