Devolver una estructura de un contrato de solidez

Solo estoy tratando de obtener confirmación de si esto es compatible con Solidity actualmente. Las respuestas anteriores a esta pregunta parecen implicar que esto se ha agregado, pero no puedo encontrar ninguna literatura concreta para confirmar.

Si tengo una estructura dentro del contrato, ¿puedo devolverla a través de un getter en el contrato? Por ejemplo:

struct myDetails {
    string firstName;
    string lastName;
}

function getName() returns (???) {
    return myName;
}

Gracias

marty

Respuestas (2)

Actualmente no es posible devolver una estructura al exterior con su propia función. No obstante, es posible con los captadores generados automáticamente de Solidity.

Al marcar una variable public(por ejemplo uint public someNumber), Solidity generará automáticamente un getter ( someContract.someNumber()). ¡ Esto de hecho funcionará en estructuras ( Foo public someFoo) e incluso en matrices y asignaciones! ( mapping(uint => player) public players) En el último caso, proporciona una clave al getter para obtener el que desea. ( someContract.players(7))

Una advertencia: los captadores actualmente no devuelven estructuras anidadas, matrices y asignaciones dentro de estructuras. Las cadenas, sin embargo, lo son.

En mapping(uint => player) public players, el tipo de valor playerparece ser un tipo definido por el usuario, es decir, no primitivo. Entonces supongo que sería alguna estructura o mapeo. Entonces, si someContract.players(7)devuelve un player, ¿significa eso que las estructuras dentro de las asignaciones pueden devolverse aunque las asignaciones dentro de las estructuras no pueden (lo que menciona en la advertencia más adelante)?
Las estructuras se pueden recuperar a través de asignaciones mediante este método, sí.
Ahora es 2018/1, ¿sigue siendo cierto que "No es posible devolver una estructura al exterior con su propia función"? Probé en Remix y parece que no rechaza la idea de devolver una estructura por completo. Sin embargo, genera un error de compilación que podría estar relacionado. Hice una pregunta aquí: stackoverflow.com/questions/48160495/…

en los repositorios oficiales no hay ninguna indicación sobre permitir una devolución del tipo de estructura. consulte https://github.com/ethereum/solidity/releases

Le sugiero que use el retorno múltiple para su función getName.

function getName() returns (string,string) {

 string firstName;
 string lastName;
  return (firstName, lastName);
}