Utwórz wiele obiektów (konstruktor asynchroniczny)

(anewobjects n)
anewobjects n [instrukcje]
(anewobjects n [instrukcje] wyrażenie1 wyrażenie2 ...)
anewobjects n funkcja
(anewobjects n funkcja wyrażenie1 wyrażenie2 ...)

Tworzy n nowych obiektów jednocześnie. Lista instrukcji lub funkcja podane jako argument są wykonywane jako konstruktor dla każdego nowego obiektu. Konstruktory są wykonywane równolegle. Żółw/obiekt wywołujący instrukcję newobjects nie czeka na zakończenie wykonania konstruktorów. Argumenty konstruktora mogą być podane jako opcjonalne wyrażenia (wszystkie nowe obiekty użyją tych samych wartości wyrażeń).

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 := (anewobjects 3)
print who
print children
foreach "ti :t [(print who @ :ti parent @ :ti )]

Rezultat wykonania:

first
[o1 o2 o3]
o1 first
o2 first
o3 first

Przykład 2:

"t := anewobjects 3 [
  to getx op :x end
  "x := random 10
  print who
]

;print :x @ :t,3 ;błąd: zmienna :x może nie być jeszcze gotowa
print getx @ :t,3

Rezultat wykonania:

o2
o1
o3
2

Przykład 3:

to model :dt
  repeat 3 [(print who repcountwait :dt]
  "x := :dt ;zmienna globalna (publiczna)
end

"t := (anewobjects 2 $model 10)
print :t

Rezultat wykonania:
Polecenie print :t jest wykonane zanim obiekty zakończą wykonanie konstruktorów.

[model1 model2]
model1 1
model2 1
model1 2
model2 2
model1 3
model2 3

Zobacz także:

Żółw - obiekt
Synchronizacja wielu obiektów

Spis treści