Opened 14 years ago
Closed 14 years ago
#1117 closed defect (fixed)
The Empty Set and the Set Index
Reported by: | Pedro Gea | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | normal | Milestone: | Mantainance |
Component: | Kernel | Version: | head |
Severity: | normal | Keywords: | |
Cc: |
Description
Se encuentra un error al usar la función Copy
sobre un conjunto indexado que ya no tiene elementos:
Set a = [[ Real a1 = 1 ]]; Real SetIndexByName(a); Set Remove(a, 1); Set Copy(a);
El error es similar al que se encuentra al intentar indexar un conjunto vacío:
Set b = Copy(Empty); Real SetIndexByName(b);
No sé bien la razón del primer error, si es que el indixado tiene algún problema cuando el conjunto se queda vacío o es que un conjunto vacío sí que admite un flag que indique que está indexado.
Se sugiere evitar ambos errores.
Sería cómodo evitar líneas del tipo:
Real If(Card(set), SetIndexByName(set), 0)
y simplemente (en caso de que se necesite) utilizar la salida del método para comprobar si tuvo algún efecto.
Change History (5)
comment:1 Changed 14 years ago by
Status: | new → accepted |
---|
comment:2 Changed 14 years ago by
comment:5 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Las funciones Append, Remove y Replace son capaces de respetar la indexación si es que existe, y lo hacen sin tener que reconstruir el índice desde cero, utilizando las funciones internas del hash para meter y sacar elementos particulares del índice.
Está claro que no hay ningún error en que haya un conjunto vacío indexado, sólo que con un índice también vacío, o quizás sería mejor decir en este caso indexable, en el sentido de que si se le hace luego uno o varios Append el conjunto podrá rehacer su índice.
No hay que dar por tanto ningún mensaje de error en ningún caso.