La razón de su error es porque en Solidez solo puede tener declaraciones fuera de las funciones.
En su código, declara el mapeo y luego, en otra operación, realiza una asignación que solo es posible en una función.
Para los otros tipos de datos, también es posible realizar la asignación durante la inicialización para que funcione.
Las asignaciones se pueden considerar como tablas hash, pero es diferente. En Solidity, una asignación se inicializa desde el principio con todas las claves posibles y el valor asociado de la clave es el predeterminado para el tipo especificado. Entonces, en Solidity, solo puede agregar nuevos valores a las claves y no puede agregar nuevas claves porque ya están allí.
También mencionar que, de forma predeterminada, no puede iterar sobre un mapeo en Solidity. De nuevo, eso está relacionado con lo que escribí antes. Además, no puede recuperar solo las claves para las que configuró algunos valores porque tiene todas las claves configuradas de forma predeterminada con valores.
Las asignaciones son solo marginalmente como tablas hash y se implementan de forma totalmente diferente a cualquier otro lenguaje de programación. Por lo general, una tabla hash tendría una matriz interna que está llena en un 25-75 % de las claves/valores que ha almacenado. Y puede hacer cosas como iterar sobre ellos, ya que solo está saltando como máximo el 75% de las celdas vacías en una tabla no trivial. Maneras en que los mapeos de Solidity son diferentes:
O(1)
operaciones verdaderas (desde el punto de vista del script), no O(1+e)
como la mayoría de las otras tablas hash. No hay costos de crecimiento de cola larga, ya que la mesa nunca se expande, ni hay O(n)
paseos en cadena de colisión.Así que recomendaría NO pensar en ellos como tablas hash. En cambio, piense en ellos solo como funciones unidireccionales que devuelven un puntero a una dirección de memoria pseudoaleatoria.
Para comprender las asignaciones, puede verlas como tablas hash .
Sobre tu código, probablemente alguien más pueda darte una explicación completa, pero creo que es porque tienes que asignar el valor al mapeo dentro de una función, por ejemplo:
contract Complex{
uint a = 1;
uint b = 3;
mapping(uint => uint) myMap;
function Complex(){
myMap[a] = b;
}
}
Este fragmento de código está haciendo lo mismo pero colocando el myMap[a] = b;
interior del constructor.
andi giga
Jossie Calderón
Jossie Calderón
ValueType
.dragosb
Jossie Calderón