Spec-Zone.ru › Octave 5

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, isglobal, isvarname, exist, regexp.

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 во второй раз очистит определение функции.

См. также: 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 …

Отобразить тип каждого 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–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

Spec-Zone.ru

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