¿Hay un error en funcB? No entiendo por qué/cuándo mencionar el nombre de la variable del parámetro de retorno en la firma de la función.
contract Foo {
// State variables go to Storage
uint[] public foo;
function funcA(uint[] x) public returns (uint) { // x is in memory
foo = x // x is copied to storage now
uint a = 100 // a is in storage
return a
}
function funcB(uint[] x) public returns (uint a) { // x is in memory
a = 100 // a is in memory? because `returns (uint a)`
return a
}
}
Además, supongo que funcA es incorrecto pero funcB está bien en el siguiente ejemplo.
contract Foo {
uint[] public foo;
function funcA() public returns (uint[]) {
uint a[];
// push stuff to a
return a
}
function funcB() public returns (uint a[]) {
// push stuff to a
return a
}
}
Mencionar el nombre de la variable de retorno es útil en caso de que desee devolver varios resultados de una función.
Por ejemplo:
function funcA() public returns (uint a,unit b,uint c){
a = 1;
b = 2;
c = 3;
}
esto generará 3 valores de retorno.
en este caso a está en la memoria. Puede manejar su devolución de DOS maneras
function funcB(uint[] x) public returns (uint a) { // x is in memory
uint z = 100;
return z; // or return 100 directly
}
o
function funcB(uint[] x) public returns (uint a) { // x is in memory
a = 100; // you have already assigned a to be 100
return;
}