Solidity函数中pure、view、constant的用法
2019-01-16 12:06
579 查看
1.solidity为函数提供了四种访问权限:public,internal,private,external
- public:公共函数,内部正常访问,外部正常访问,子类可以继承
- internal:内部函数,内部正常访问,外部无法访问,子类可以继承
- private: 私有函数,内部正常访问,外部无法访问,子类无法继承
- external: 外部函数,内部不能访问,外部正常访问,子类可继承
2.solidity函数的格式为:
function 函数名(参数) public|private|internal|external pure|view|constant 无返回值|returns (返回值类型)。
pragma solidity ^0.5.0; contract math{ // int uint uint numa = 100; uint numb = 200; // uint numc = 2; // function add() view public returns(uint){ // return numa + numb; // } function add(uint a, uint b) pure public returns(uint){ return a+b; } function sub(uint a, uint b) pure public returns(uint){ return a-b; } function mul(uint a, uint b) pure public returns(uint){ return a*b; } function div(uint a, uint b) pure public returns(uint){ return a/b; } function mod(uint a, uint b) pure public returns(uint){ return a%b; } function squ(uint a,uint b) pure public returns(uint){ return a**b; } uint8 a = 3; uint8 b = 4; function weiyu() view public returns(uint){ return a&b; } function weihuo() view public returns(uint){ return a|b; } function weifan() view public returns(uint){ return ~a; } function weiyihuo() view public returns(uint){ return a^b; } function zuoyi() view public returns(uint){ return a<<1; } function youyi() view public returns(uint){ return a>>1; } }
-
当函数有返回值,函数中正常来讲需要有
pure
|view
|constant
关键字 如果没有返回值,在调用函数过程中,需要主动去调用底层的call()
方法。当函数返回值为全局变量或属性时,可以使用view
或者constant
view
可以理解成constant
的新版本,可以简单理解成他们俩等价pure
。如果只是纯粹的返回一个值,直接使用pure
反之,使用view
或者constant
即可。 -
在Solidity中constant、view、pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!),因为不需要矿工来验证,所以用好这几个关键词很重要!
-
这三个关键词有什么区别和联系,简单来说,在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。view的作用和constant一模一样,可以读取状态变量但是不能改;pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。
参考:
[1] http://shaolinbit.com/2018/02/06/blockchain-solidity-qx/
[2] https://www.geek-share.com/detail/2732465360.html
相关文章推荐
- Solidity constant view pure关键字的区别与联系
- ios中webview的高级用法(二) - webview与js的通信框架
- Android中利用VideoView播放网络上视频的基础用法
- UIAlertView用法
- UICollectionView 集合视图用法,自定义Cell
- 详解Android中ViewPager的PagerTabStrip子控件的用法
- loadView,viewDidLoad,viewDidUnload用法 与区别
- Session,ViewState用法
- UICollectionView的基础用法
- ViewPager的用法
- CreateFileMapping 、MapViewOfFile、UnmapViewOfFile函数用法及示例(转载)
- init、loadView、viewDidLoad、viewDidUnload、dealloc的用法
- 谈谈RecyclerView的用法与添加Header的个人理解
- IOS MapView 用法
- 转-WebView loadData与loadDataWithBaseURL用法、区别
- 自定义View基础之——canvas,paint的基本用法
- 倒影view和surfaceView的示例用法
- QTableView基本用法讲解,Qt表格控件的使用方法
- ViewFlipper的功能和用法
- UIScrollView的属性和用法