solidity中函数的形式如下:
function () {internal|external|public|private} [pure|view|payable] [returns ()]
- fuction:声明函数
- function name:函数名
- parameter types:(变量类型 名称)
- {internal|external|public|private}:函数可见型说明符
- internal:只能合约内部访问,继承合约可用
- external:只能合约外部访问(内部可通过this.FunctionName()调用)
- public:全部可见
- private:合约内部访问,继承不可用
[合约中定义的函数要有明确指向性,无默认值]
contract FuncType1 {
uint256 public num = 5;
function add() external {
num = num +1;
}//add运行时num被写入了
function addPure(uint256 _Num) external pure returns(uint256 _NewNum){
_NewNum = _Num + 1;
}//被标记为pure的addPure()函数无法写入,只能根据输入return一个值
function addView() external view returns (uint256 _num1){
_num1 = num + 1;
}//被标记为view的函数可以读取链上状态,可以读取到add()函数中的num
}
- [pure|view|payable] :函数权限关键字
payable:可支付,能为合约支付eth
pure:既不能读取也不能写入链上状态
view:能读取但不能写入链上状态
非pure和view函数既可读取也可写入状态变量
contract FuncType2 {
uint256 public num = 10;
//internal:内部函数
function minus() internal {
num = num - 1;
}
//合约内的函数可以调用内部函数
function minusCall() external {
minus();
}//此external函数使得上面的minus()函数可以从合约外部被调用
function minusPayable() external payable returns(uint256 balance){
minus();
balance = address(this).balance;
}//payable函数通过当前地址向合约转入eth,并调用了minus()函数
//非pure view函数都是既可以读取也可以写入
}