5. 函数
5.1 函数重载
函数不能重名
函数的不同不以返回值类型不同为依据,但是参数类型或参数数量不一样,则可以被认为是不同的函数,可以被重载。另外int160和address是同一种类型,不能重载
但是重名函数怎么调用呢?编译器能自动判断就会自动判断,不能判断则会报错
5.2 函数命名参数
pragma solidity ^0.4.0;
contract funcParam{
uint public num;
string public name;
//通过输入函数参数为状态变量赋值
function setParam(uint _num,string _name) {
num = _num;
name = _name;
}
//调用赋值函数
function Test(){
setParam({_num:100, _name:"xiaoyu"});
}
//调用赋值函数
//因为参数是显式指定的,所以顺序并不会影响赋值
function Test2(){
setParam({_name:"xiaoxia", _num:200});
}
//不显式指定
function Test4(){
setParam(10,"zhengjianxun");
}
}
5.3 返回值特性
返回值的几种规范写法如下
pragma solidity ^0.4.0;
contract funcReturn{
// 返回值可以指定名称
// 10
function returnTest() returns(uint mul) {
uint a = 10;
return a;
}
// 100
function returnTest2() returns(uint mul) {
mul = 100;
}
//会优先返回 return后面的值
// 100
function returnTest3() returns(uint mul) {
uint a = 10;
mul = 100;
return a;
}
// 1
function returnTest4() returns(uint mul) {
uint a = 10;
return 1;
}
//可以返回多个值
// 6,8
function returnTest5(uint a,uint b)view returns(uint add,uint mul) {
add = a+b;
mul = a*b;
}
//如下这种写法也是可以的,其实返回值的名称和return中的名称无关,因此我们甚至可以实现交换
// 6,8
function returnTest6(uint a,uint b)view returns(uint add,uint mul) {
return(a+b,a*b);
}
}
5.4 变量的生命周期与作用域
状态变量可以和函数内部同名的变量同时存在,修改函数内部变量并不会影响状态变量。另外,一旦变量作为参数名称,函数内部不能再定义同名变量