一、知识概览

        view和pure的使用方法:view是只有输入没有输出,pure是单纯的输入和输出。调用这两种函数时,均不消耗燃料。而对内存的状态进行改变时,需要消耗燃料。因此我们称view和pure是节约gas的利器。
        public是权限的标识符,如果不加说明,编译时默认是public,但是会警告甚至是错误(版本不同)。权限的标识符体现出封装的特点,类似于C++,但是也有不同,solidity的权限标识符包括四种--public(任何人都可以调用该函数,包括DApp的使用者),private(只有合约本身可以调用该函数(在另一个函数中)),internal(只有这份合同以及由此产生的所有合同才能称之为合同),external(只有外部可以调用该函数,而合约内部不能调用)

二、例证

下面我们通过一个例子来更好的理解

pragma solidity ^0.4.0;    //0.4.0是版本号,不用过于纠结

contract HelloWorld{        //创建名为HelloWorld的合约 
    string Myname="Ba_Xijie";    //我的名字
    
    //第一个函数,使用view
    function getName()public view returns(string)
    {
        return Myname;
    }
    
    //第二个函数,对内存进行改变
    function changeName(string _newName)public
    {
        Myname=_newName;    //将_newName赋值给Myname
    }
    
    function pureTest(string _name) pure public returns(string){
        return _name;    //直接返回
    }
}

 编译通过,没有问题的哈

三、运行结果与分析

下面Deploy一下~

1.getName函数

 

 首先点击getName即调用该函数,显示出了我的名字,这个“0”的意思是这个函数可以有多个返回值,虽然这里只有一个string类型的返回值。

通过多次调用这个函数,会发现燃料没有重复消耗,维持在一个值:

2.changeName函数

输入一个字符串(注意英文输入引号),点击调用changName函数,

 查看gas值,变了

 

 多次调用函数gas都会被消耗。

3.pureTest函数

同样的一波操作,调用pureTest函数

 输出值为“希希”,多次调用,gas值并没有重复消耗。

Logo

为所有Web3兴趣爱好者提供学习成长、分享交流、生态实践、资源工具等服务,作为Anome Land原住民可不断优先享受各种福利,共同打造全球最大的Web3 UGC游戏平台。

更多推荐