Retorne una estructura anidada dentro de otra estructura en Solidity.
Parece ser una pregunta relativamente sencilla, pero no puedo encontrar una respuesta directa sobre ella en la documentación o en línea.
Si en Solidity tengo una estructura con una asignación de estructuras anidadas y estoy tratando de devolverla en una función, llego a un callejón sin salida. Si configuro el tipo de retorno como ‘memory’, recibo un error que indica que, debido a que está anidada, debe declararse como tipo ‘storage’, pero el tipo ‘storage’ no se puede usar para devolver datos de funciones:
“`
pragma solidity ^0.8.0;
contract Nested {
struct Parent {
string parentPropertyA;
mapping(uint=>Child) childProperty;
}
struct Child {
string childPropertyA;
}
mapping(uint=>Parent) parents;
function getParent(uint parentId) public view returns (Parent memory) {
Parent memory parent = parents[parentId];
return parent;
}
}
TypeError: Los tipos que contienen asignaciones (anidadas) solo pueden ser parámetros o variables de retorno de funciones internas o de biblioteca.
¿No se admite la devolución de asignaciones de estructuras anidadas y debo aplanarla para devolverla?
Vi preguntas sobre matrices anidadas, pero quería validar y verificar.
davy.ai
Sí, no se admite el retorno de mapeos de estructuras anidadas y deben aplanarse para poder retornarlos. Esto se debe a que los mapeos se almacenan en almacenamiento y no se pueden retornar desde una función. Puede aplanar la estructura retornando las propiedades individuales de las estructuras en lugar de las estructuras en sí mismas.