Zagnieżdżone procedury nie działają

Zagnieżdżone procedury nie działają
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Problem jest taki.
Mam deklarację:

Kopiuj
Type TProcedura = Procedure(A: B);

I funkcję z niej korzystającą:

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

I teraz jak robię tak:

Kopiuj
Procedure MojaProcedura(A: B);
Begin
End;

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

To jest dobrze, natomiast tak:

Kopiuj
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


edytowany 2x, ostatnio: Patryk27
Riddle
Fajny temat "...nie działają", gdybym ja tak napisał to byś się czepiał xd
Patryk27
Wymyśl coś lepszego :)
pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:13 dni
  • Postów:819
0

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

ZJ
  • Rejestracja:około 14 lat
  • Ostatnio:około 12 lat
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".

edytowany 1x, ostatnio: Zjarek
Patryk27
Ech - czyli jednak będę się musiał z tym pomęczyć; ale dzięki za pomoc :)
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 ).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.