soldidity学习——internal和external

一、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,否则代码会编译不通过。

发布了6 篇原创文章 · 获赞 2 · 访问量 2666

猜你喜欢

转载自blog.csdn.net/qinmiaofu/article/details/103943444