一、external顾名思义,当函数加了这个修饰之后,只能在外部被调用,而不能在合约内部被其他函数所调用。在本例中,如果我们在test函数中直接调用changge函数(return changge()),编译会不通过。但是如果我们在changge前加上this,相当于给函数制定外部调用地址,那么编译可以通过。该规则在继承中同样适用。
pragma solidity^0.5.0;
contract ExternalTest{
function changge()external pure returns(string memory){
return "changge";
}
function test()public view returns(string memory){
return this.changge();
}
}
二、与external相反,internal修饰的函数,只能在合约内部被其他函数所调用,比如下面例子中,我们给跳舞这个方法加了internal修饰后,在图片1处不显示tiaowu这个函数,但是我们可以通过test来调用这个函数,调用后同样输出字符串“tiaowu”。
pragma solidity^0.5.0;
contract InternalTest{
function tiaowu()internal pure returns(string memory){
return "tiaowu";
}
function test()public view returns(string memory){
return tiaowu();
}
}
三、值得注意的是,由于版本关系,在返回值类型(string)后面必须加上memory,否则代码会编译不通过。