Utwórz obiekt (konstruktor asynchroniczny)

(anewobject)
anewobject [instrukcje]
(anewobject [instrukcje] wyrażenie1 wyrażenie2 ...)
anewobject funkcja
(anewobject funkcja wyrażenie1 wyrażenie2 ...)

(anewo)
anewo [instrukcje]
(anewo [instrukcje] wyrażenie1 wyrażenie2 ...)
anewo funkcja
(anewo funkcja wyrażenie1 wyrażenie2 ...)

Tworzy nowy obiekt. Lista instrukcji lub funkcja podane jako argument są wykonywane jako konstruktor nowego obiektu. Konstruktor jest wykonywany równolegle z dalszymi instrukcjami żółwia wywołującego instrukcję anewobject Argumenty konstruktora mogą być podane jako opcjonalne wyrażenia.

Obiekt w POOL jest uproszczoną wersją żółwia. Obiekty nie posiadają reprezentcji graficznej i nie mogą obsługiwać zdarzeń związanych z grafiką (np. kliknięć myszy). Dzięki temu obiekty zajmują mniej pamięci, są szybciej tworzone i szybciej wykonują polecenia.

Przykład 1:

"t := (newo)
print who
print children
print parent @ :t
print who @ :t

Rezultat wykonania:

first
[o1]
first
o1

Przykład 2:

"t := newo [
  "x := 10
  print who
]
print :x @ :t

Rezultat wykonania:

Zauważ: napis "first" może pojawić się przed napisem "o1". Konstruktor obiektu jest wykonywany równolegle z instrukcjami żółwia #first.

first
o1

Przykład 3:

to model :x
  to fn
    op :zmienna^2
  end
  wait 50       ;opóźnienie
  let "zmienna :x
  print who
end

"t := (anewo $model 5)
"y := fn @ :t

print who       ;wariant 1
;(print who :y) ;wariant 2

Rezultat wykonania:

Wariant 1: Napis "first" pojawia się pierwszy - żółw #first nie czeka na koniec konstruktora.

first
model1

Wariant 2: Napis "first 25" pojawia się po "model1" - użycie wyniku funkcji fn zapisanego w zmiennej :y wymusza oczekiwanie na zakończenie konstruktora i wykonanie funkcji.

model1
first 25

Zobacz także:

Żółw - obiekt
Synchronizacja wielu obiektów

Spis treści