Spec-Zone.ru › Octave 9

Предыдущий: Переменные с сохранением состояния, Вверх: Переменные [Оглавление][Индекс]

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 (…) ¶

Выводит список текущих переменных, соответствующих заданным шаблонам.

Синтаксис допустимых шаблонов такой же, как описано для команды clear. Если шаблоны не указаны, выводятся все переменные.

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

Доступны следующие опции, но они не могут быть объединены.

global

Вывести переменные в глобальной области видимости вместо текущей.

-regexp

Шаблоны рассматриваются как регулярные выражения при сопоставлении с переменными для отображения. Используется тот же синтаксис шаблонов, что и для функции regexp.

-file

Следующий аргумент обрабатывается как имя файла. Выводятся все переменные, найденные в указанном файле. При чтении переменных из файла шаблоны не принимаются.

Если вызвана как функция, возвращает массив ячеек имён определённых переменных, соответствующих заданным шаблонам.

См. также: whos, isglobal, isvarname, exist, regexp.

: whos ¶
: whos pattern … ¶
: whos option pattern … ¶
: S = whos ("pattern", …) ¶

Предоставляет подробную информацию о текущих переменных, соответствующих заданным шаблонам.

Опции и синтаксис шаблонов совпадают с командой 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) ¶
: old_val = whos_line_format (new_val, "local") ¶

Запрос или установка строки формата, используемой командой whos.

Полная строка формата:

%[modifier]<command>[:width[:left-min[:balance]]];

Доступные последовательности команд:

%a

Выводит атрибуты переменных (c=complex, s=sparse, f=формальный параметр, g=глобальная, p=с сохранением состояния).

%b

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

%c

Выводит имена классов переменных.

%e

Выводит элементы, содержащиеся в переменных.

%n

Выводит имена переменных.

%s

Выводит размерности переменных.

%t

Выводит имена типов переменных.

Каждая команда также может иметь модификатор выравнивания:

l

Выравнивание по левому краю.

r

Выравнивание по правому краю (по умолчанию).

c

Выравнивание по столбцам (применимо только к команде %s).

Параметр width — положительное целое число, определяющее минимальное количество столбцов для вывода. Максимальное значение не требуется, так как поле будет автоматически расширяться по мере необходимости.

Параметры left-min и balance доступны только при использовании модификатора выравнивания по столбцам с командой ‘%s’. balance указывает номер столбца внутри ширины поля, который будет выравниваться между записями. Нумерация начинается с 0, что соответствует самому левому столбцу. left-min указывает минимальную ширину поля слева от указанного столбца выравнивания.

Формат по умолчанию:

"  %la:5; %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) ¶

Проверка существования имя в качестве переменной, функции, файла, каталога или класса.

Код возврата c — это одно из значений:

1

имя — это переменная.

2

имя — это абсолютный путь к файлу, обычный файл в Octave path, или (после добавления ‘.m’) — файл функции в Octave path.

3

имя — это файл ‘.oct’ или ‘.mex’ в Octave path.

5

имя — это встроенная функция.

7

имя — это каталог.

8

имя — это класс classdef.

103

имя — это функция, не связанная с файлом (введена в командной строке).

0

имя не существует.

Если указан необязательный аргумент тип, то проверяются только символы указанного типа. Допустимые типы:

"var"

Проверка только переменных.

"builtin"

Проверка только встроенных функций.

"dir"

Проверка только каталогов.

"file"

Проверка только файлов и каталогов.

"class"

Проверка только классов classdef.

Если тип не указан, а для имени существует несколько возможных совпадений, exist вернёт код в соответствии со следующим списком приоритетов: переменная, встроенная функция, oct-файл, каталог, файл, класс.

exist возвращает 2, если в пути поиска Octave присутствует обычный файл с именем имя. Для получения информации об других типах файлов, не находящихся в пути поиска, используйте комбинацию функций file_in_path и stat.

Примечание по программированию: Если имя реализовано неисправным файлом .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 … ¶

Удалить имена, соответствующие заданным шаблонам, освободив память.

Шаблон может содержать следующие специальные символы:

?

Соответствует любому одиночному символу.

*

Соответствует нулю или более символам.

[ list ]

Соответствует списку символов, указанному в список. Если первый символ — ! или ^, соответствует всем символам, кроме указанных в список. Например, шаблон [a-zA-Z] соответствует всем прописным и строчным буквенным символам. В Windows квадратные скобки интерпретируются буквально и не используются для группировки символов.

Например, команда

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

Аргументы шаблон интерпретируются как регулярные выражения, и все совпадения будут очищены.

За исключением -exclusive и -regexp, все длинные опции могут быть использованы и без тире. Обратите внимание, что помимо -exclusive, может появиться только одна другая опция. Все опции должны идти перед любыми шаблонами.

Примечания по программированию: Команда clear name очищает переменную имя только тогда, когда одновременно определены переменная и (затенённая) функция с именем имя. Например, предположим, что вы определили функцию foo, а затем скрыли её, выполнив присвоение foo = 2. Выполнение команды clear foo один раз очистит определение переменной и восстановит определение foo как функции. Выполнение clear foo во второй раз очистит определение функции.

При очистке имени локальной переменной, связанной с глобальной переменной, удаляется только локальная копия переменной. Глобальная копия остаётся нетронутой и может быть восстановлена с помощью global global_varname. Напротив, clear -g global_varname удалит как локальные, так и глобальные переменные.

См. также: clearvars, who, whos, exist, mlock.

: 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$

См. также: clear, who, whos, exist.

: pack () ¶

Сжатие рабочей области памяти в MATLAB.

Эта функция предоставляется для совместимости, но ничего не делает в Octave.

См. также: clear.

Информация о функции или переменной, такой как её расположение в файловой системе, также может быть получена внутри Octave. Это обычно полезно только во время разработки программ, а не внутри программы.

: type name … ¶
: type -q name … ¶
: text = type ("name", …) ¶

Отображает содержимое name, которое может быть файлом, функцией (m-файлом), переменной, оператором или ключевым словом.

type обычно добавляет заголовок, описывающий категорию name, такую как функция или переменная; Параметр -q подавляет это поведение.

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

: which name … ¶
: [str, …] = which ('name', …) ¶

Отображает тип каждого name.

Если name определён из файла функции, отображается полное имя файла.

См. также: help, lookfor.

: 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 всегда будет возвращать пустой список для этих категорий.

См. также: which, ls, exist.

Предыдущий: Постоянные переменные, Вверх: Переменные [Содержание][Индекс]

© 1996–2023 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/v9.2.0/Status-of-Variables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API