Wstawianie przy użyciu nawiasów klamrowych

<< Kliknij, aby wyświetlić Spis treści >>

Nawigacja:  Dodatki > TCL > Składnia języka TCL >

Wstawianie przy użyciu nawiasów klamrowych

Nawiasy klamrowe dostarczają bardziej radykalnej formy wstawiania, w której wszystkie znaki specjalne tracą swoje znaczenie. Jeśli słowo jest ujęte w nawias klamrowy, wszystkie znaki wewnątrz nawiasu stają się jego wartością. Nie jest wykonywane żadne podstawienie, spacje, tabulacje, znaki nowej linii i średniki są traktowane jak normalne znaki. Poprzedni przykład może być zapisany w sposób następujący:

set msg {Eggs: $2.18/dozen

Gasoline: $1.49/gallon}

Znak $ nie powoduje tutaj podstawienia zmiennej, a znak nowej linii nie działa jak separator poleceń.

Jedną z najważniejszych funkcji nawiasów klamrowych jest opóźnienie interpretacji. Opóźniona interpretacja oznacza, że znaki specjalne nie są przetwarzane natychmiast przez Tcl, lecz są przekazywane do polecenia jako zawartość argumentu. Dopiero procedura polecenia dokonuję odpowiedniego ich przetworzenia, często przekazując z powrotem argumenty do Tcl, w celu ich interpretacji. Np. następująca procedura zlicza liczbę wystąpień pewnej wartości na liście:

proc occur {value list} {

        set count 0

        foreach el $list {

            if $el==$value {

                incr count

            }

        }

        return $count

    }

Ciało procedury jest ujęte w nawiasy klamrowe, więc jest bezpośrednio przekazywane do proc. Dzięki temu wartość zmiennej list nie zostanie podstawiona w chwili, gdy polecenie proc jest interpretowane. Jest to konieczne aby procedura mogła pracować prawidłowo; ponieważ różne wartości muszą być podstawione pod $list przy każdym wywołaniu. W przykładzie nawiasy klamrowe są zagnieżdżone, zatem ostatni argument procedury proc rozciąga się aż do odpowiedniego nawiasu zamykającego. Poniższy rysunek ilustruje sposób wykonania kodu przez interpreter Tcl po uruchomieniu polecenia:

occur 18 {1 34 18 16 18 72 1994 –3}

Occur 18 {1 34 18 16 18 72 1994 –3}

Occur

18

1 34 18 16 18 72 1994 –3

set count o

foreach el $list {

  if $el==$value                             {

        incr count

  }

}

return $count

Foreach

El

1 34 18 16 18 72 1994 –3

if $el==$value {

        incr count

}

if $el ==$value {

    Incr count

}

If

18==18

incr count

Incr count

Incr

Count

Sposób interpretacji sktyptów zagnieżdżonych w poszczególnych etapach wykonania procedury occur. Tekst nieobramowany to fragment interpretowanego kodu, strzałka w dół odpowiada kolejnemu wywołaniu w Tcl. Każda ramka pokazuje słowa przekazywane do kolejnej procedury już po podstawieniu, natomiast strzałka w prawo to rekurencyjne wywołanie interpretera Tcl.