Как указать область определения функции: § Область определения функции

прицелов | PowerShell на примере

областей | PowerShell By ExamplePowerShell By Example

Когда вы создаете переменную, псевдоним или функцию в PowerShell, они доступны только в текущей области, в которой они были созданы. Например, когда вы создаете переменную в функции, она доступна только в этой функции. Когда вы создаете переменную в скрипте, она доступна в скрипте и во всех функциях скрипта.

Есть способ сделать эти элементы доступными за пределами текущей области.

Локальная

Локальная область действия зависит от контекста, в котором выполняется код в данный момент.

Чтобы определить локальный элемент, используйте модификатор local: . По умолчанию областью действия переменной является область Local .

 $вар = "бла"
$вар
 

Результат:

 бла
 

Global

Элементы глобальной области доступны везде.

Чтобы определить элемент как глобальный, используйте модификатор global: .

 $global:varOne = "bla" # Назначить переменную в глобальной области видимости
Write-Host "Variable One:" $global:varOne # Напечатать переменную
# Функция для демонстрации локальной и глобальной области видимости
функция MyFunc() {
    $global:varOne = "бла-бла"
    $varTwo = "бу"
    вернуть $varTwo
}
Write-Host "Variable Two:" $varTwo # Напечатать переменную
$varTwo = MyFunc # Вызвать функцию и изменить переменную
Write-Host "Variable One:" $varOne # Напечатать переменную
Write-Host "Variable Two:" $varTwo # Напечатать переменную
 

Результат:

 Первая переменная: bla
Вторая переменная:
Переменная первая: бла-бла
Вторая переменная: бу
 

Как видите, мы определили глобальную переменную с именем varOne и изменили значение varOne в функции. У нас не было доступа к переменной varTwo , потому что область действия переменной была установлена ​​в функции как локальная.

Private

Элементы, которые определены как частные, недоступны за пределами области, в которой они определены.

Чтобы сделать элемент закрытым, используйте модификатор private: .

 # Убедитесь, что переменная пропала
Remove-Variable -Name var1 -ErrorAction SilentlyContinue
$var1 = "Это переменная"
Запись-хост "var1 = '$var1'"
функция test1 {
    Write-Host "Внутри функции, var1 = $var1"
}
тест1
# Теперь давайте сделаем это в частном порядке
Remove-Variable -Name var1 -ErrorAction SilentlyContinue
$Private:var1 = "Это переменная"
функция test2 {
    Write-Host "Внутренняя функция с приватным, var1 = $var1"
}
тест2
 

Результат

 var1 = 'Это переменная'
Внутри функции, var1 = это переменная
Внутренняя функция с закрытым, var1 =
 

Как видите, функция test2 не имела доступа к переменной

var1 , поскольку она была определена как частная.

Сценарий

Область сценария создается автоматически при каждом запуске сценария PowerShell.

Для определения скрипта элемента используется модификатор script:.

 функция myFunc {
    $Script:VarOne = "Ограничено сценарием"
    $Var2 = "Функция ограничена"
}
моя функция
Ведущий записи "Var 1: $VarOne"
Ведущий записи "Var 2: $Var2"
 

Результат:

 Var 1: Script Scoped
Вар 2:
 

Как видите, скрипт не может получить доступ к переменным $Var2 , но может получить доступ к переменной $VarOne .

Далее: Строки

C311 Имя, Область, Привязка

C311 Имя, Область, Привязка Дана Враджитору
Языки программирования C311

Имя

  • Имя
    — строка символов, используемая для представления чего-либо еще. Обычно это идентификаторы, но операторы (+, &, *) также имена.
  • Они позволяют нам ссылаться на объекты в программе с помощью символа вместо этого адреса.
  • Они обеспечивают уровень абстракции в программе: классы для данных абстракция, функции управления абстракцией.
  • Они позволяют нам лучше сосредоточиться на некоторых аспектах программы, снижение концептуальной сложности кода.

Переплет

  • Связывание — операция связывания двух вещей, как имя и сущность, которую оно представляет.
  • Время привязки — момент выполнения привязки (компиляция, исполнение и т.д.).
  • Раннее связывание позднее связывание . Относится к привязке время.
  • Статическая привязка динамическая привязка
    . Относится к компиляция против времени выполнения.
  • Полиморфизм — разрешение имени (функции, переменной) быть привязан к более чем одному объекту.
  • Псевдоним — несколько привязок для одного и того же объекта.

Раннее/позднее связывание

  • Тип : раннее связывание ограничивает тип переменной. Поздно привязка позволяет решить это, когда присваивается значение.
  • Функция : функция известна во время компиляции или оставлена сопоставляется, когда вызов выполняется.
  • Значение : поздняя привязка ожидает, пока значение/данные, назначенные переменная необходима перед ее оценкой или загрузкой.

Динамическое связывание

  • Точное значение каждого идентификатора (переменной/функции) определяется, когда инструкция выполняется на основе контекста.
  • Пример на Лиспе: функция A ссылается на «глобальную» переменную Икс.
  • Функция B объявляет локальную переменную x и затем вызывает функцию A.
  • В этом вызове функции x является локальной переменной из B.

Время связывания

  • Дизайн языка — основные аспекты языка, встроенные функции, ключевые слова.
  • Реализация языка — такие детали, как размер каждого тип, представление файла, исключения времени выполнения.
  • Программирование — алгоритмы, проектирование структур данных.
  • Компиляция — отображение между конструкциями более высокого уровня и машинный код, статические данные.
  • Связывание — между вызовами функций и внешними объектами и их фактический код.
  • Загрузить — виртуальные адреса, динамические библиотеки.
  • Runtime — виртуальные функции, значения переменных и многое другое.

Срок службы объекта

  • Объект — любая сущность в программе. Переменные, функции.
  • Время жизни объекта — период между созданием объекта и разрушение.
  • Срок службы привязки — период между созданием и разрушение привязки.
  • Обычно время жизни привязки является подмножеством времени жизни объекта.
  • Висячая ссылка — когда привязка существует после разрушение объекта.
    Пример: удаление указателя, но не превращение его в NULL.
  • Утечка памяти — когда объект все еще существует, но его нет привязка к нему. Пример: сделать указатель NULL, не удаляя его первый. Решается сборкой мусора.

Распределение объектов

  • Статические объекты — они имеют абсолютный адрес, который существует для продолжительность программы.
  • Глобальные переменные, статические локальные переменные, рабочие таблицы, функциональное пространство для языков, не поддерживающих рекурсию, константы.
  • Стек объектов — последний пришел, первый ушел (LIFO). Функциональное пространство для языков, поддерживающих рекурсию,
  • Куча объектов — могут быть выделены и освобождены в произвольное время. Динамически выделяемые части связанных данных структуры, объекты с динамически изменяемым размером.

Функциональное пространство

  • Стек вызовов функций содержит кадр для каждой функции.
  • Одна рама содержит:
  • аргументы, возвращаемые значения
  • локальные переменные, константы времени разработки
  • временные: промежуточные значения, полученные в сложных вычислениях
  • бухгалтерская информация: обратный адрес, ссылка на вызывающего кадр, отладочная информация.

Управление кучей

  • Обычно есть связанный список — свободный список — всей памяти блоки не используются.
  • При запросе на выделение программа ищет в куче за свободный блок как минимум запрошенного размера.
  • First fit — возврат первого блока, соответствующего запросу.
  • Наилучшее соответствие — возврат наименьшего блока, соответствующего запросу.
  • Наихудший вариант — самый большой блок, чтобы избежать фрагментации памяти
  • Пул — разделение списка на подсписки по размеру.
  • Компактный — перемещение распределяющих куч ближе друг к другу создавать большие свободные блоки. При перемещении объекта необходимо обновить все ссылки на него.

Область применения и правила

  • Область привязки — текстовая область программы в какая привязка активна.
  • Scope — иногда область программы максимального размера в который без привязки изменяет область действия.
  • Среда ссылок — набор активных привязок в любой данный момент выполнения программы.
  • Объем привязок определяется правилами привязок, включенными в описание языка.

Объем привязки

  • Обычно область привязки определяется статически, т.е. во время компиляции.
  • Когда вызывается функция с локальной переменной, привязка между именем переменной и экземпляром переменной, локальной для вызов создан.
  • Все предыдущие привязки для того же имени переменной деактивированы в процессе (или скрыто).
  • Когда вызов функции завершается, предыдущая привязка для имени восстановлен.

Статические прицелы

  • Статическая область — когда область привязки определяется во время компиляция.
  • Иногда называется лексической областью действия.
  • Текущая привязка — соответствующее объявление, блок которого больше всего близко окружает точку в программе, где имя упомянул.
  • Глобальная область действия — некоторые языки поддерживают только глобальные переменные (Базовый)
  • Локальная статическая область — для языков, не поддерживающих рекурсию а для статических переменных в другом.

Вложенные объявления

 (пусть ((А 1))
  (пусть ((А 2) (В А)) В) 
  • В Лиспе переменные в let объявляются параллельно. в приведенное выше выражение B равно 1.
  • Обычно во вложенном объявлении невозможно получить доступ к значение предыдущей привязки.
  • Исключение: эквиваленты памяти как в Фортране, множественные ссылки на одни и те же объекты.
  • Для классов можно указать область вызова функции (оператор :: в C++).

Динамический прицел

  • Привязки, определенные во время выполнения. Они зависят от порядка в какие функции вызываются.
  • Текущая привязка — та, которая встречалась последней во время казни и который еще не уничтожен.
  • Проверка типов для динамической области видимости выполняется во время выполнения.

Динамическая область видимости — Lisp

(переменная по умолчанию 3) ; y является глобальным
(определ. f (x)
  (+ х у)) ; мы думаем, что f использует глобальный y
(f 10) ; => 13
(дефун г ()
  (пусть ((у 4) (а 1))
    (ф а)))
(г) ; => 5 ; подумай еще раз
 

Область применения

  • Статическая область действия зависит от таблицы символов, которая представляет собой карту или словарь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *