7.3 Состояние переменных
При создании простых одноразовых программ очень удобно видеть, какие переменные доступны в командной строке. Функция who и её аналоги whos и whos_line_format покажут разную информацию о том, что находится в памяти, как показано ниже.
str = "A random string"; who -| Variables in the current scope: -| -| ans str
- who
- who pattern …
- who option pattern …
- C = who ("pattern", …)
-
Вывод списка определённых переменных, соответствующих заданным шаблонам.
Синтаксис шаблонов такой же, как описано для команды
clear. Если шаблоны не указаны, выводятся все переменные.По умолчанию отображаются только переменные, видимые в локальной области.
Следующие опции допустимы, но не могут использоваться совместно.
global-
Вывести переменные из глобальной области, а не текущей.
-regexp-
Шаблоны рассматриваются как регулярные выражения при сопоставлении с переменными для отображения. Используется тот же синтаксис шаблонов, что и в функции
regexp. -fileСледующий аргумент обрабатывается как имя файла. Выводятся все переменные, найденные в указанном файле. Шаблоны не принимаются при чтении переменных из файла.
Если вызывается как функция, возвращает ячейковый массив имён определённых переменных, соответствующих заданным шаблонам.
- whos
- whos pattern …
- whos option pattern …
- S = whos ("pattern", …)
-
Предоставление подробной информации о текущих переменных, соответствующих заданным шаблонам.
Опции и синтаксис шаблонов такие же, как для команды
who.Расширенная информация о каждой переменной суммируется в таблице со следующими по умолчанию записями.
- Attr
-
Атрибуты перечисленных переменных. Возможные атрибуты:
- blank
-
Переменная в локальной области
a-
Автоматическая переменная. Автоматическая переменная создаётся интерпретатором, например
argn. c-
Переменная комплексного типа.
f-
Формальный параметр (аргумент функции).
g-
Переменная с глобальной областью.
pПостоянная переменная.
- Name
-
Имя переменной.
- Size
-
Логический размер переменной. Скаляр — 1x1, вектор — 1xN или Nx1, матрица 2-го порядка — MxN.
- Bytes
-
Объём памяти, используемой для хранения переменной.
- Class
Класс переменной. Примеры: double, single, char, uint16, cell и struct.
Таблица может быть настраиваема для отображения больше или меньше информации с помощью функции
whos_line_format.Если
whosвызывается как функция, возвращает массив структур с именами определённых переменных, соответствующих заданным шаблонам. Поля в структуре, описывающие каждую переменную: name, size, bytes, class, global, sparse, complex, nesting, persistent.См. также: who, whos_line_format.
- val = whos_line_format ()
- old_val = whos_line_format (new_val)
- whos_line_format (new_val, "local")
-
Запрос или установка строки форматирования, используемой командой
whos.Полная строка форматирования:
%[modifier]<command>[:width[:left-min[:balance]]];
Доступны следующие последовательности команд:
%a-
Выводит атрибуты переменных (g=глобальная, p=постоянная, f=формальный параметр, a=автоматическая переменная).
%b-
Выводит количество байтов, занимаемых переменными.
%c-
Выводит имена классов переменных.
%e-
Выводит элементы, содержащиеся в переменных.
%n-
Выводит имена переменных.
%s-
Выводит размерности переменных.
%tВыводит типы переменных.
Каждая команда также может иметь модификатор выравнивания:
l-
Выравнивание по левому краю.
r-
Выравнивание по правому краю (по умолчанию).
cВыравнивание по столбцам (применимо только к команде %s).
Параметр
width— целое положительное число, определяющее минимальное количество столбцов, используемых для вывода. Максимальное значение не нужно, так как поле будет автоматически расширяться по мере необходимости.Параметры
left-minиbalanceдоступны только при использовании модификатора выравнивания по столбцам с командой ‘%s’.balanceуказывает номер столбца внутри поля ширины, который будет выравниваться между записями. Нумерация начинается с 0, что обозначает самый левый столбец.left-minзадаёт минимальную ширину поля слева от указанного столбца выравнивания.Формат по умолчанию:
" %a:4; %ln:6; %cs:16:6:1; %rb:12; %lc:-1;\n"При вызове из функции с опцией
"local", переменная меняется локально для функции и для любых вызываемых ею подпрограмм. Исходное значение переменной восстанавливается при выходе из функции.См. также: whos.
Вместо отображения переменных в памяти можно определить, доступна ли данная переменная. Это позволяет изменить поведение программы в зависимости от наличия переменной. Следующий пример иллюстрирует это.
if (! exist ("meaning", "var"))
disp ("The program has no 'meaning'");
endif - c = exist (name)
- c = exist (name, type)
-
Проверка существования name как переменной, функции, файла, каталога или класса.
Код возврата c — один из следующих:
- 1
-
name — переменная.
- 2
-
name — абсолютный путь к файлу, обычный файл в
path, или (после добавления ‘.m’) файл функции вpath. - 3
-
name — файл ‘.oct’ или ‘.mex’ в
path. - 5
-
name — встроенная функция.
- 7
-
name — каталог.
- 8
-
name — класс. (Примечание: не реализовано в данный момент)
- 103
-
name — функция, не связанная с файлом (введена в командной строке).
- 0
name не существует.
Если указан необязательный аргумент type, проверка выполняется только для символов указанного типа. Допустимые типы:
"var"-
Проверка только для переменных.
"builtin"-
Проверка только для встроенных функций.
"dir"-
Проверка только для каталогов.
"file"-
Проверка только для файлов и каталогов.
"class"Проверка только для классов. (Примечание: эта опция принимается, но в данный момент не реализована)
Если тип не указан, и существует несколько возможных совпадений для имени,
existвернёт код в соответствии со следующим списком приоритетов: переменная, встроенная функция, oct-файл, каталог, файл, класс.existвозвращает 2, если обычный файл с именем name присутствует в пути поиска Octave. Для получения информации об других типах файлов, не находящихся в пути поиска, используйте комбинацию функцийfile_in_pathиstat.Примечание для программирования: если name реализован ошибочным файлом .oct/.mex, вызов exist может привести к падению Octave. Для поддержания высокой производительности Octave доверяет файлам .oct/.mex вместо их изоляции.
См. также: file_in_loadpath, file_in_path, dir_in_loadpath, stat.
Обычно Octave управляет памятью, но иногда бывает целесообразно вручную удалять переменные из памяти. Это обычно требуется при работе с большими переменными, занимающими значительную часть памяти. На компьютере, использующем формат с плавающей точкой IEEE, следующая программа выделяет матрицу, которая требует около 128 МБ памяти.
large_matrix = zeros (4000, 4000);
Поскольку наличие этой переменной в памяти может замедлить другие вычисления, может потребоваться вручную удалить её из памяти. Это можно сделать с помощью функций clear или clearvars.
- clear
- clear pattern …
- clear options pattern …
-
Удалите имена, соответствующие заданным образцам pattern, из таблицы символов.
Образец pattern может содержать следующие специальные символы:
?-
Соответствует любому одиночному символу.
*-
Соответствует нулю или более символам.
[ list ]Соответствует списку символов, указанному в list. Если первый символ равен
!или^, то соответствует всем символам, кроме указанных в list. Например, шаблон[a-zA-Z]соответствует всем строчным и заглавным буквам алфавита.
Например, команда
clear foo b*r
очищает имя
fooи все имена, начинающиеся с буквы 'b' и заканчивающиеся буквой 'r'.Если
clearвызывается без аргументов, все пользовательские переменные из текущего рабочего пространства (т.е. локальные переменные) очищаются. Любые глобальные переменные больше не будут видны в текущем рабочем пространстве, но они продолжат существовать в глобальном рабочем пространстве. Функции не затрагиваются этим видомclear.Следующие опции доступны в длинной и короткой форме
all, -all, -a-
Очистить все локальные и глобальные пользовательские переменные и все функции из таблицы символов.
-exclusive, -x-
Очистить переменные, которые не соответствуют следующему шаблону.
functions, -functions, -f-
Очистить имена функций из таблицы символов функций. Постоянные переменные будут повторно инициализированы до своего значения по умолчанию, если функция не была заблокирована в памяти с помощью
mlock. global, -global, -g-
Очистить имена глобальных переменных.
variables, -variables, -v-
Очистить имена локальных переменных.
classes, -classes, -c-
Очистить таблицу структуры классов и все объекты.
-regexp, -rАргументы pattern обрабатываются как регулярные выражения, и все совпадения будут очищены.
За исключением -exclusive и -regexp, все длинные опции можно использовать и без тире. Обратите внимание, что помимо -exclusive может быть только одна другая опция. Все опции должны идти перед любыми шаблонами.
Примечание для программистов: команда
clear nameочищает переменную name только тогда, когда определены и переменная, и (затенённая) функция с именем name. Например, предположим, что вы определили функциюfoo, а затем скрыли её присвоениемfoo = 2. Выполнение командыclear fooодин раз очистит определение переменной и восстановит определениеfooкак функции. Выполнениеclear fooво второй раз очистит определение функции.
- clearvars
- clearvars pattern …
- clearvars -regexp pattern …
- clearvars … -except pattern …
- clearvars … -except -regexp pattern …
- clearvars -global …
-
Удалите переменные, соответствующие заданным pattern, из памяти.
Образец pattern может содержать следующие специальные символы:
?-
Соответствует любому одиночному символу.
*-
Соответствует нулю или более символам.
[ list ]Соответствует списку символов, указанному в list. Если первый символ равен
!или^, то соответствует всем символам, кроме указанных в list. Например, шаблон[a-zA-Z]соответствует всем строчным и заглавным буквам алфавита.
Если указана опция -regexp, то последующие шаблоны рассматриваются как регулярные выражения, и все совпадения будут очищены.
Если указана опция -except, то последующие шаблоны выбирают переменные, которые не будут очищены.
Если указана опция -global, то все шаблоны будут применяться к глобальным переменным, а не к локальным.
При вызове без аргументов,
clearvarsудаляет все локальные переменные.Пример кода:
Очистить все переменные, начинающиеся с
'x'и конкретную переменную"foobar"clearvars x* foobar
Очистить конкретную переменную
"foobar"и использовать регулярные выражения для очистки всех переменных, начинающихся с'x'или'y'.clearvars foobar -regexp ^x ^y
Очистить все переменные, кроме
"foobar"clearvars -except foobar
Очистить все переменные, начинающиеся с
"foo", за исключением тех, которые заканчиваются на"bar"clearvars foo* -except -regexp bar$
- pack ()
-
Сжатие памяти рабочего пространства в MATLAB.
Эта функция предоставляется для совместимости, но в Octave ничего не делает.
См. также: clear.
Информация о функции или переменной, например, её местоположение в файловой системе, также может быть получена в Octave. Это обычно полезно только во время разработки программ, а не в рамках программы.
- type name …
- type -q name …
- text = type ("name", …)
-
Отобразить содержимое name, которое может быть файлом, функцией (m-файлом), переменной, оператором или ключевым словом.
typeобычно добавляет заголовок, описывающий категорию name, например, функцию или переменную; Опция -q подавляет это поведение.Если переменная вывода не используется, содержимое отображается на экране. В противном случае возвращается ячейка строк, где каждый элемент соответствует содержимому каждой запрошенной функции.
- which name …
-
Отобразить тип каждого name.
Если name определен из файла функции, также отображается полное имя файла.
- what
- what dir
- w = what (dir)
-
Список Octave-специфических файлов в каталоге dir.
Если dir не указан, используется текущий каталог.
Если запрашивается возвращаемое значение, найденные файлы возвращаются в структуре w. Структура содержит следующие поля:
- path
-
Полный путь к каталогу dir
- m
-
Массив ячеек m-файлов
- mat
-
Массив ячеек mat-файлов
- mex
-
Массив ячеек mex-файлов
- oct
-
Массив ячеек oct-файлов
- mdl
-
Массив ячеек mdl-файлов
- slx
-
Массив ячеек slx-файлов
- p
-
Массив ячеек p-файлов
- classes
-
Массив ячеек каталогов классов (@classname/)
- packages
Массив ячеек каталогов пакетов (+pkgname/)
Примечание по совместимости: Octave не поддерживает mdl, slx и p-файлы; также он не поддерживает каталоги пакетов.
whatвсегда возвращает пустой список для этих категорий.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Status-of-Variables.html