Funkcje i klasy zagnieżdżone

Funkcje zagnieżdżone mają dostęp do wszystkich zmiennych i funkcji widocznych w zewnętrznej funkcji.
Jeśli funkcja zagnieżdżona zostanie użyta jako konstruktor, nowy żółw-obiekt będzie miał dostęp do funkcji widocznych w zewnętrznej funkcji. Nie jest to jednak dziedziczenie z klasy opisanej funkcją zewnętrzną:
- kod funkcji zewnętrznej nie jest wykonywany jako konstruktor klasy bazowej;
- zmienne lokalne i globalne utworzone w zewnętrznej funkcji nie są widoczne dla nowego żółwia.

Uwaga: wszystkie funkcje zdefiniowane w programie są zagnieżdżone w głównej funkcji żółwia #first.

Przykład 1:
Wywołanie funkcji zagnieżdżonej f2: widoczne są funkcje i zmienne zewnętrzne.

"x := 1
to f1 print "zewnętrzna end

to test
  to f2
    print "f2
    print :x
  end
  f1
  f2
end

test

Rezultat wykonania:

zewnętrzna
f2
1

Przykład 2:
Funkcja zagnieżdżona f2 użyta jako klasa nowego żółwia: widoczne są funkcje zewnętrzne, jednak nowy żółw nie ma dostępu do zmiennej :x utworzonej na zewnątrz funkcji test.

"x := 1
to f1 print "zewnętrzna end

to test
  to f2
    print "f2
    ;print :x  ;błąd: zmienna :x nie jest dostępna
    f1
  end
  "t := newt $f2
end

test

Rezultat wykonania:

f2
zewnętrzna

Zobacz także:

Żółw - obiekt

Spis treści