Utwórz żółwia (konstruktor asynchroniczny)

(newturtle)
anewturtle [instrukcje]
(anewturtle [instrukcje] wyrażenie1 wyrażenie2 ...)
anewturtle funkcja
(anewturtle funkcja wyrażenie1 wyrażenie2 ...)

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

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

Przykład 1:

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

Rezultat wykonania:

first
[t1]
first
t1

Przykład 2:

"t := anewt [
  "x := 10
  print who
]
;print :x @ :t ;błąd: zmienna :x może nie być jeszcze gotowa
print who

Rezultat wykonania:

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

first
t1

Przykład 3:

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

"t := (anewt $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

Spis treści