Lo que tienes allí es constante tipada. Las constantes tipadas son distintas de constantes ordinarias (a.k.a. constantes verdaderas), que es lo que su constVar
es. Observe que no necesitó especificar un tipo en constVar
; si tuviera, es posible ver que el compilador que permite a los nuevos valores asignados a él, también:
const
constVar: Integer = 1;
The Free Pascal manual describe constantes proporcionado:
Contrariamente a las constantes ordinarias, un valor puede ser asignado a ellos en tiempo de ejecución. Este es un concepto antiguo de Turbo Pascal, que ha sido reemplazado con soporte para variables inicializadas: para una descripción detallada, consulte la sección 4.4, página 183.
El soporte para asignar valores a las constantes tipadas se controla mediante la directiva {$J}
: se puede apagar, pero está activado por defecto (para compatibilidad con Turbo Pascal). Las variables inicializadas siempre están permitidas.
Para una variable inicializada, reemplace const
con var
en su declaración. Obtendrá su valor al entrar en el alcance. También puede desactivar la directiva $J
antes de la declaración mecanografiada constante:
{$J-}
const
constArr: array [1..3] of ShortInt = (1, 2, 3);
{$J+}
Tanto si se vuelve a activar después depende de usted.
Las constantes tipadas son modificables por la forma en que están almacenadas en la memoria. De hecho, es porque están almacenados en la memoria que originalmente eran modificables. Las constantes ordinarias no se almacenan en la memoria como objetos distintos. Cuando el compilador encuentra una constante ordinaria utilizada en su programa, la reemplaza en línea con el valor de la constante, como si hubiera usado un literal en su lugar. Una constante tipada, por otro lado, reside en su propia ubicación en la memoria, y cuando se refiere a uno en el código, su valor se lee de la memoria, al igual que el uso de cualquier otra variable. Usas constantes tipadas cuando no hay sintaxis disponible para un literal; por ejemplo, no puedes tener una matriz o grabar literales.
Véase también http://stackoverflow.com/questions/48934/in-delphi-7-why-cani-i-assign-a-value-to-a-const y http://stackoverflow.com/questions/2714365/delphi-all-constants-are-constant-but-some-are-more-constant-than-others. –