delphi inno-setup pascal pascalscript

delphi - Sintaxis de estructura adecuada para Pascal si luego comienza fin y;



inno-setup pascalscript (1)

Han pasado alrededor de 20 años desde la última vez que tuve que escribir en Pascal. Parece que no puedo usar los elementos de estructura del lenguaje correctamente donde estoy anidando if then bloqueo usando begin y end . Por ejemplo, esto me da un error del compilador "Identificador esperado" .

procedure InitializeWizard; begin Log(''Initialize Wizard''); if IsAdminLoggedOn then begin SetupUserGroup(); SomeOtherProcedure(); else begin (*Identifier Expected*) Log(''User is not an administrator.''); msgbox(''The current user is not administrator.'', mbInformation, MB_OK); end end; end;

Por supuesto, si elimino el bloque if then y los bloques de begin end asociados con ellos, entonces todo está bien.

A veces entiendo bien este tipo de sintaxis y funciona bien, pero los problemas se exasperan al anidar los bloques if then else .

Resolver el problema no es suficiente aquí. Quiero tener una mejor comprensión de cómo usar estos bloques. Claramente me falta un concepto. Algo de C ++ o C # probablemente se está arrastrando desde otra parte de mi mente y está entorpeciendo mi comprensión. He leído algunos artículos al respecto, y creo que lo entiendo y luego no.


Debes hacer coincidir cada begin con un end en el mismo nivel, como

if Condition then begin DoSomething; end else begin DoADifferentThing; end;

Puede acortar el número de líneas utilizadas sin afectar la ubicación, si lo prefiere. (Sin embargo, lo anterior podría ser más fácil cuando se está acostumbrando a la sintaxis).

if Condition then begin DoSomething end else begin DoADifferentThing; end;

Si está ejecutando una sola declaración, el begin..end son opcionales. Tenga en cuenta que la primera condición no contiene una terminación ; , ya que aún no está terminando la declaración:

if Condition then DoSomething else DoADifferentThing;

El punto y coma es opcional en la última instrucción de un bloque (aunque normalmente lo incluyo incluso cuando es opcional, para evitar problemas futuros cuando agrega una línea y se olvida de actualizar la línea anterior al mismo tiempo).

if Condition then begin DoSomething; // Semicolon required here DoSomethingElse; // Semicolon optional here end; // Semicolon required here unless the // next line is another ''end''.

También puede combinar bloques de instrucciones simples y múltiples:

if Condition then begin DoSomething; DoSomethingElse; end else DoADifferentThing; if Condition then DoSomething else begin DoADifferentThing; DoAnotherDifferentThing; end;

El uso correcto para su código sería:

procedure InitializeWizard; begin Log(''Initialize Wizard''); if IsAdminLoggedOn then begin SetupUserGroup(); SomeOtherProcedure(); end else begin Log(''User is not an administrator.''); msgbox(''The current user is not administrator.'', mbInformation, MB_OK); end; end;