Skip to main content

可见性和 getter 函数

状态变量的可见性

  • public: 内部、被继承的子合约、外部均可见
  • internal: 在合约内部和被继承的子合约都可见
  • private: 只在当前合约内部可见

函数的可见性

  • external: 仅在合约外部可见,当前合约内部不可见
  • public: 内部、被继承的子合约、外部均可见
  • private: 只在当前合约内部可见
  • internal: 在合约内部和被继承的子合约都可见

getter 函数

  • 编译器自动为所有 public 状态变量创建 getter 函数。
  • getter 函数具有外部(external)可见性。
  • 如果你有一个数组类型的 public 状态变量,那么你只能通过生成的 getter 函数访问数组的单个元素。如果要在一次调用中返回整个数组,则需要写一个函数,例如:
contract arrayExample {
// public state variable
uint[] public myArray;

// 返回整个数组
function getArray() public view returns (uint[] memory) {
return myArray;
}
}

getter 函数: 结构体中的数组和映射

pragma solidity ^0.4.0 <0.9.0;

contract Complex {
struct Data {
uint a;
bytes3 b;
mapping (uint => uint) map;
uint[3] c;
uint[] d;
bytes e;
}
mapping (uint => mapping(bool => Data[])) public data;
}

这将会生成以下形式的函数,在结构体内的映射和数组(byte 数组除外)被省略了,因为没有好办法为单个结构成员或为映射提供一个键。

function data(uint arg1, bool arg2, uint arg3)
public
returns (uint a, bytes3 b, bytes memory e)
{
a = data[arg1][arg2][arg3].a;
b = data[arg1][arg2][arg3].b;
e = data[arg1][arg2][arg3].e;
}