Solidity 函数类型
demo.sol(函数类型):
pragma solidity ^0.4.5;
contract FunctionTest{
uint public v1;
uint public v2;
function internalFunc() internal{
v1 = 10;
}
function externalFunc() external returns (uint res){
v2 = 20;
return v2;
}
function resetV2() public {
v2 = 0;
}
function callFunc() public {
//直接使用内部的方式调用
internalFunc(); //<--- 合约内部直接调用,正确
//不能在内部调用一个外部函数,会报编译错误。
//Error: Undeclared identifier.
//externalFunc(); //<--- 外部合约不可以调用
//不能通过`external`的方式调用一个`internal`
//Member "internalFunc" not found or not visible after argument-dependent lookup in contract FuntionTest
//this.internalFunc(); //<--- this.相当于外部调用
//使用`this`以`external`的方式调用一个外部函数
this.externalFunc();
}
}
// 合约的继承
contract Son is FunctionTest {
function callInternalFunc() public{
internalFunc(); // 可以继承父合约的内部方法
this.externalFunc();
}
}
contract FunctionTest1{
uint public v3;
function externalCall(FunctionTest ft) public {
//调用另一个合约的外部函数
v3 = ft.externalFunc();
//不能调用另一个合约的内部函数
//Error: Member "internalFunc" not found or not visible after argument-dependent lookup in contract FuntionTest
//ft.internalFunc();
}
function resetV3() public {
v3 = 0;
}
}