Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Области видимости

Читайте также:
  1. II. В области научно-исследовательской деятельности
  2. III. В области общественной деятельности
  3. IV. В области культурно-творческой деятельности
  4. Административная ответственность за нарушение законодательства в области размещение заказа для государственных и муниципальных нужд
  5. Администрация Брянской области
  6. Анализ видимости спутников
  7. Анализ входной информации предметной области и выделение информационных объектов

Дело в том, что любая переменная может быть объявлена глобальной или локальной. Значения локальных доступны только на определенном участке программы, глобальных – везде. Рассмотрим пример. Создайте и выполните такой скрипт.

 

(

k = 10

)

print k

Круглые скобки как раз и означают начало и конец некоторого участка, далее называемого областью видимости. Все переменные, объявленные в этом участке, считаются локальным, если прямо не указано обратное. На первый взгляд все кажется просто. Переменной присваивается число, в данном случае 10, затем это значение выводится на экран. Не то на самом деле. Поскольку первый раз переменная встречается внутри области видимости, то внутри нее она получает значение 10. После выхода из этой области значение k теряется и в операторе print k участвует уже другая переменная – глобальная, так как все переменные, объявленные или в первый раз встретившиеся вне какой-либо области видимости, считаются глобальными. Объявить локальную переменную вне области видимости просто не удастся, получите сообщение об ошибке. Но вернемся к нашему примеру. Результатом работы оператора вывода print k будет вывод на экран сообщения

undefined

Это значение присваивается переменной, которая объявлена, но которой не присвоено никакого значения. А дальше начинается еще интереснее. Вот что произойдет, если выполнить тот же скрипт второй раз. Внутри области видимости система встретит выражение

k = 10

Теперь, после предыдущего выполнения этого скрипта будет считаться, что k – глобальная переменная, поскольку она была упомянута вне областей видимости. Ей и присвоится значение 10 и при выводе print k на экран выйдет сообщение

Отсюда правило: с переменными надо быть крайне осторожным. Все глобальные переменные лучше всего объявлять в начале скрипта. Делается это, например, так:

global k

(--Начало области видимости

k = 10

) --Конец области видимости

print k

Вот теперь все правильно. Если Вам все же нужно, чтобы внутри области видимости переменная k была локальной, то напишите так:

global k

(local k --Начало области видимости

k = 10

) --Конец области видимости

print k

Осталось только упомянуть, что области видимости могут быть вложенными друг в друга. Переменная, локальная внутри области видимости будет видимой внутри всех областей вложенных в нее. Рассмотрим пример.

global k

(local k --Начало первой области видимости

k = 10

(--Начало второй области видимости

print k

) --Конец второй области видимости

) --Конец первой области видимости

print k

В этом случае мы имеем дело с двумя переменными k, во второй области видимости, вложенной в первую, используется та же самая k, что и в первой.

Круглые скобки – не единственный способ начать новую область видимости. Кроме них новая область начинается

Небольшое исключение. Переменная, управляющая циклом for локальна внутри него всегда. В скрипте

(local i = 50

(for i = 1 to 5 do print i

)

print i

)

две переменных i, а не одна, первая объявлена локальной в первой области видимости, другая управляет циклом. В этом нетрудно убедится, выполнив приведенный скрипт.

 


Дата добавления: 2015-10-31; просмотров: 95 | Нарушение авторских прав


Читайте в этой же книге: Литералы имен объектов | Литералы массивов | Выражения сравнения | Блоковые выражения | Контекстные выражения | Каскадирование префиксов | Операторы цикла do и while | Создание функций, локальных внутри структуры | Символьные строки | Логические (Булевы) значения |
<== предыдущая страница | следующая страница ==>
С чего начать| Выделение памяти и уборка мусора

mybiblioteka.su - 2015-2024 год. (0.007 сек.)