7.3 Состояние переменных
При создании простых одноразовых программ бывает очень удобно видеть, какие переменные доступны в командной строке. Функция who и её аналоги whos и whos_line_format отобразят различную информацию о том, что находится в памяти, как показано ниже.
str = "A random string"; who -| Variables in the current scope: -| -| ans str
- : who
- : who шаблон …
- : who опция шаблон …
- : C = who ("шаблон", …)
-
Выводит список текущих определённых переменных, соответствующих заданным шаблонам.
Синтаксис шаблонов такой же, как описано для команды
clear. Если шаблоны не указаны, выводятся все переменные.По умолчанию отображаются только переменные, видимые в локальной области видимости.
Следующие опции допустимы, но их нельзя комбинировать.
global-
Выводит переменные из глобальной области видимости вместо текущей.
-regexp-
Шаблоны рассматриваются как регулярные выражения при сопоставлении переменных для вывода. Используется тот же синтаксис шаблонов, что и в функции
regexp. -fileСледующий аргумент интерпретируется как имя файла. Выводятся все переменные, найденные в указанном файле. При чтении переменных из файла шаблоны не принимаются.
При вызове как функции возвращает массив ячеек имён определённых переменных, соответствующих заданным шаблонам.
- : whos
- : whos шаблон …
- : whos опция шаблон …
- : S = whos ("шаблон", …)
-
Предоставляет подробную информацию о текущих определённых переменных, соответствующих заданным шаблонам.
Опции и синтаксис шаблонов такие же, как и для команды
who.Расширенная информация о каждой переменной суммируется в таблице со следующими по умолчанию записями.
- Attr
-
Атрибуты перечисленной переменной. Возможные атрибуты:
- blank
-
Переменная в локальной области видимости
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=формальный параметр).
%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 …
-
Удалить имена, соответствующие заданным patterns, освобождая тем самым память.
Шаблон 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второй раз очистит определение функции.Когда локальное имя переменной, связанное с глобальной переменной, очищается, удаляется только локальная копия переменной. Глобальная копия не трогается и может быть восстановлена с помощью
global global_varname. И наоборот,clear -g global_varnameудалит как локальную, так и глобальную переменные.
- : clearvars
- : clearvars pattern …
- : clearvars -regexp pattern …
- : clearvars … -except pattern …
- : clearvars … -except -regexp pattern …
- : clearvars -global …
-
Удалить переменные, соответствующие заданным patterns, из памяти.
Шаблон 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/v6.4.0/Status-of-Variables.html