¿Es posible hacer algo similar a lo siguiente? Actualmente, al compilarlo arrojará un error que dice que "El nombre debe referirse a una estructura, enumeración o contrato". También tengo un "trabajo?" solución más abajo, pero no estoy seguro de cuál sería la forma correcta.
mapping(address => uint256) shelf;
mapping (address => shelf) bookcase;
La idea es que una dirección apunte a un librero que va a un estante que va a un int (número de libros).
Lo siguiente funciona bien hasta ahora para establecer el valor para el estante. El problema en esta versión es que no puedo hacer público el librero y no sé cómo crear un captador.
struct shelf
{
mapping(address => uint256) shelves;
}
mapping (address => shelves) bookcase;
bookcase[msg.sender] = shelf();
//shelf_address is argument from the function this code is in
bookcase[msg.sender].shelves[shelf_address] = 1;
Gracias por los consejos.
Así es como se utilizan estructuras y asignaciones anidadas dentro de una asignación.
Accesible a través de librería[--dirección--][--índice--].libros / librería[--dirección--][--índice--].shelfId Sin embargo, en la vida real harías que el segundo mapeo fuera una matriz.
pragma solidity ^0.4.10;
contract Mappings {
mapping(address => mapping(uint256 => Shelf)) bookcase;
struct Shelf {
bytes32[] books;
uint shelfId;
}
}