Область видимости и блоки
Часть раздела Fundamentals путешествия по Lua на Coddy — урок 86 из 90.
В Lua вы можете создавать новые области видимости в любом месте вашего кода, используя блоки do...end. Эти блоки позволяют вам точно контролировать, где можно получить доступ к вашим локальным переменным, обеспечивая точный контроль над областью видимости переменных.
Вот как вы можете создать новую область видимости с помощью блока do...end:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Это работает
print(innerVar) -- Это тоже работает
end
print(outerVar) -- Это работает
print(innerVar) -- Это вызовет ошибку!Мощный аспект области видимости заключается в том, что вы можете иметь локальные переменные с одинаковыми именами в разных блоках, и они остаются совершенно отдельными:
local name = "Alice"
do
local name = "Bob" -- Другая переменная!
print(name) -- Выводит "Bob"
end
print(name) -- Выводит "Alice"Каждый блок do...end создает свою собственную изолированную среду для локальных переменных. Переменные, объявленные внутри блока, не могут выйти во внешнюю область видимости, в то время как переменные из внешних областей видимости могут быть доступны из внутренних блоков.
Задание
ЛегкоСоздайте вложенные блоки do...end, чтобы продемонстрировать, как локальные переменные с одинаковыми именами остаются полностью разделенными в разных областях видимости.
Сначала создайте локальную переменную с именем playerLevel со значением 10 во внешней области видимости и выведите её на печать.
Затем создайте блок do...end и внутри него:
- Объявите новую локальную переменную также с именем
playerLevelсо значением25 - Выведите на печать эту внутреннюю
playerLevel
После завершения внутреннего блока снова выведите на печать внешнюю playerLevel, чтобы показать, что она осталась неизменной.
Это демонстрирует, что локальные переменные с одинаковыми именами в разных областях видимости полностью независимы — внутренняя переменная не влияет на внешнюю.
Шпаргалка
Создавайте новые области видимости в любом месте вашего кода, используя блоки do...end для управления областью видимости переменных:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- Это работает
print(innerVar) -- Это тоже работает
end
print(outerVar) -- Это работает
print(innerVar) -- Это вызовет ошибку!Локальные переменные с одинаковыми именами в разных блоках остаются полностью независимыми:
local name = "Alice"
do
local name = "Bob" -- Другая переменная!
print(name) -- Выводит "Bob"
end
print(name) -- Выводит "Alice"Переменные, объявленные внутри блока, не могут выйти во внешнюю область видимости, в то время как переменные из внешних областей видимости доступны из внутренних блоков.
Попробуйте сами
-- TODO: Напишите ваш код здесьВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Fundamentals
4Операторы 2: Сравнение и логика
Операторы равенстваОператоры сравненияОператор 'and'Оператор 'or'Оператор 'not'Сокращенные вычисленияЗначения Truthy и FalsyИтоги: Простая логика7Основы условной логики
Оператор if-thenОператор if-then-elseОператор elseifИтоги — Сундук с сокровищами10Таблицы, часть 1: Списки
Что такое таблица?Создание таблицыДоступ к элементам по индексуИзменение элементов по индексуОператор длины '#'table.insert()table.remove()Итоги: управление участниками группы13Проект: Простой магазин зелий
Настройка проектаДобавление зелья2Переменные и типы данных
Что такое переменная?ЧислаСтрокиБулевы значенияЗначение 'nil'Функция type()Правила именованияИтоги — Профиль персонажа5Базовый вывод
Вывод литераловВывод переменныхВывод нескольких значенийОбъединение строк и переменныхФункция tostring()ВводПриведение типовПовторение — Отчет о состоянииПовторение — До 1208Основы работы со строками
string.len()string.upper и string.lowerstring.sub()string.rep()string.find()Повторение — Форматирование имени пользователя11Таблицы 2: Словарный стиль
Пары ключ-значениеСоздание таблиц-словарейДоступ: квадратные скобкиДоступ через точечную нотациюДобавление и изменение парУдаление пар с помощью nilИтоги: свойства элементов14Область видимости переменных
Глобальные переменныеЛокальные переменныеЗачем использовать локальные переменные?Область видимости и блокиПовторение — Головоломка на область видимости3Операторы 1: Арифметика и конкатенация
Арифметические операторыОператор остатка от деленияОператор возведения в степеньКонкатенация строкПриоритет операторовПовторение: Простые вычисления6Проект: Вывод характеристик персонажа
Приветственное сообщениеОбъявление характеристик персонажа9Основы функций
Объявление функцииВызов функцииФункции с параметрамиФункции с несколькими параметрамиОператор 'return'Повторение — Калькулятор площади