Solidity函数view,pure,constant的用法
函数访问权限:public,external,private,internal
//子类可以得到父类下面的方法,父类用了public,external的话
pragma solidity ^0.5.7;
contract Animal{
function tets1() pure public returns(uint){
//如果是public的话,外部是可以访问的,external外部也是可以访问的,private,interna只能是内部访问
return 100;
}
}
contract Cat is Animal{
}
//internal,private是只鞥是自己的内部使用,子合约是不能继承他的
//exteral,public子合约是可以继承的
constant:
如果加了constant的话,就不用调用call方法来获取值,比如在终端的时候不用调用这个call方法,直接可以打印出来了,可以返回变量的值
uint public n=100;
function speed() constant returns(uint){
return n;
}
public:
说明是外部的话就可以调用的,在合约里面是可以调用这个值的string name ,string public name,后者在合约里面是有显示的
view:
既没有返回什么状态变量的值,也没有什么存粹的值的话(return 10,'hello'这些的)
比如返回return msg.render就可以使用view
pure:
就是很纯粹的意思,就是具体返回什么值回来,不是变量
如果下面是return p(带有状态变量的值)的话,不能用这个pure,得用constant,如果是return 12具体的某个数值的话,就可以用pure
pragma solidity ^0.5.7; contract test{
//属性 uint p; address _owner;
//构造函数 function car() public{ p=100; _owner=msg.sender; } //public的话可以外部调用 function get() public returns(uint){ return p; } //view,当不返回存粹的值或者是变量的时候,比如msg.sender使用 function get1() view public returns(address){ return msg.sender } //pure,返回存粹的值使用,123,'hello' function get2() pure public returns(uint){ return 123 } //返回带有状态变量的值,_owner function get3() constant public returns(address){ return _owner } }