É possível declarar um const de uma matriz em Delphi e FreePascal sem ter os elementos ser constantes?
-
09-09-2019 - |
Pergunta
Há muito tempo atrás eu me lembro que eu poderia fazer isso em Turbo Pascal 7.
Talvez eu esteja errado e é algo que eu preciso esclarecer, mas é possível declarar uma matriz de strings como uma constante?
Se não, qual é a opção / solução alternativa.
O que eu tenho agora é:
type
TStates = (sOne, sTwo, sThree);
var
TArrayOfString: array [sOne..sThree] of string =
('State one', 'State two', 'State three');
mas gostaria de substituir a var com um const.
Graças
Editar 1 :. Adicionado mais algum código para esclarecer a minha pergunta ??p>
Solução
Apenas substituindo var com const é perfeitamente legal:
const
TArrayOfString: array [1..3] of string =
('String one', 'String two', 'String three');
Estou curioso por que seu identificador nome começa com um T embora. Você estava tentando definir um tipo como este:
type
TArrayOfString = array [1..3] of string;
const
MyArrayOfString: TArrayOfString =
('String one', 'String two', 'String three');
Você não pode ter uma matriz de comprimento variável (AFAIK) como um const, nem pode tê-lo de um tipo indefinido.
Este é com Delphi 2009. YMMV com FreePascal.
Outras dicas
No dia de idade pascal / delphi quando escreveu:
const
A : Integer = 5;
Você não definir uma constante, mas uma variável inicializada.
Você pode definir sem problema:
const
A : array [1..2] of string = ('a', 'b');
Mas as cordas têm de ser constantes também. Eles precisam ser conhecido em tempo de compilação.
O mesmo vale para:
var
A : array [1..2] of string = ('a', 'b');
Então, você não pode escrever:
var
B : string = 'hi';
A : array [1..2] of string = (B, 'b');
Porque B é uma var. Mas você pode escrever:
const
B = 'hi'; // Even a typed constant does not work.
var
A : array [1..2] of string = (B, 'b');
Note que a opção: "Assignable digitado constantes" (falso padrão) é fornecido para criar o velho tempo constantes digitadas que podem ser atribuídos. É apenas para compatibilidade com versões anteriores, porque você realmente quer que seus constantes para ser constante.