Zagnieżdżone procedury nie działają

0

Problem jest taki.
Mam deklarację:

Type TProcedura = Procedure(A: B);

I funkcję z niej korzystającą:

Procedure Ustaw(Proc: TProcedura);
{...}

I teraz jak robię tak:

Procedure MojaProcedura(A: B);
Begin
End;

Procedure HelloWorld;
Begin
 Ustaw(@MojaProcedura);
End;

To jest dobrze, natomiast tak:

Procedure HelloWorld;
  Procedure MojaProcedura(A: B);
  Begin
  End;
Begin
 Ustaw(@MojaProcedura);
End;

Już nie (czepia się tego, że MojaProcedura jest procedurą zagnieżdżoną) :/
Da się jakoś zrobić, aby to działo w ten sposób czy jednak procedura MojaProcedura nie może być zagnieżdżona?
FPC 2.6.0 jakby co

0

Też walczyłem kiedyś z takim problemem ale poddałem się i zrezygnowałem z procedury zagnieżdżonej.

3

Procedura zagnieżdżona musi być wywoływana z ciała procedury macierzystej. Wywoływanie jej poza nią jest bezsensowne, szczególnie jak korzystasz wewnątrz niej ze zmiennych zadeklarowanych w funkcji macierzystej. Pewnie dlatego w Pascalu nie można ich przekazywać.

W językach takich jak Python takie zachowanie może przechodzić, ze względu na dynamiczny charakter szukania "czemu dana nazwa odpowiada".

0

Da się jakoś zrobić, aby to działo w ten sposób czy jednak procedura MojaProcedura nie może być zagnieżdżona?

Może i można, tylko po co? Łatwiej wywalić żeby nie była zagnieżdżona.
Nie wiem jak się procedury zagnieżdżone mają do kodu wynikowego, ale to trochę nielogiczne, że przechowujesz sobie pointer na procedurę zagnieżdżoną, bo potem możesz to wysłać nie wiadomo gdzie i wykonać nie z procedury-matki. Co prawda jak się domyślam kompilator by się nawet nie połapał, ale jest to nielogiczne.

tak przy okazji: procedury zagnieżdżone gmatwają kod, nie powinno się ich używać (nie martw się, też tak mam że ich używam :P ).

1 użytkowników online, w tym zalogowanych: 0, gości: 1