es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.