solidity智能合约[27]-函数与函数重载
1
function (<parameter types>) {public|internal|external} [pure|constant|view|payable] [returns (<return types>)]
函数的作用
1、与区块链交互
2、本地执行
3、封装代码
1
2
3
4
5
6
7
uint public num;
string public name;
function setparam(uint _num,string _name) public {
num = _num;
name = _name;
}
带参函数调用—函数命名参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
pragma solidity ^0.4.23;
contract funcParam{
//状态变量
uint public num;
string public name;
//代餐函数
function setparam(uint _num,string _name) public {
num = _num;
name = _name;
}
//调用
function Test() public {
setparam(99,"bob");
}
//函数命名参数
function Test2() public {
setparam({_num:99,_name:"bob"});
}
function Test3() public {
setparam({_name:"Alice",_num:999});
}
//错误代码,参数个数不匹配
// function Test4() public {
// setparam(100);
// }
}
函数重载
在一个合约中有相同名字的函数,就是函数的重载。
重载必须要函数的类型与长度都不相同。
下面的例子都是错误的写法
错误11
2
3
4
5
6
7
function fun(){
}
function fun(){
}
错误2
1
2
3
4
5
6
7
function fun() returns(uint){
}
function fun() returns(bytes1){
}
错误3
1
2
3
4
5
6
7
function fun() returns(uint){
}
function fun(){
}
正确1
1
2
3
4
5
6
7
function fun(uint k) public pure{
}
function fun() public pure{
}
正确2
1
2
3
4
5
6
7
function fun2(uint a) public pure{
}
function fun2(bytes1 b) public pure{
}
例子剖析1
在下面的例子中,fun3有两个重载的函数。函数test不能够调用fun3(2),因为不能够明确到底是要调用哪一个。
fun3(256)能够执行成功。因为256超过了int8的最大值,只能够调用fun3(uint a). 如果想明确,可以强制的转换,例如uint256(2)。
1
2
3
4
5
6
7
8
9
10
11
12
13
function fun3(uint a) public {
num = 256;
}
function fun3(uint8 b) public{
num = 8;
}
function test() public{
//fun3(2);错误,不明确
fun3(256);
fun3(uint256(2));
}
本文链接:https://dreamerjonson.com/2018/11/21/solidity-27-function-overload/
版权声明:本博客所有文章除特别声明外,均采用CC BY 4.0 CN协议许可协议。转载请注明出处!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。