8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 79 80 81 82 83 84 85 ... 365

» exist bar ans -

2

Итак, функция max является встроенной, a bar — нет. Поэтому, если в текущем каталоге есть две функции max и bar, которые вызываются из командной строки или некоторой функции, то обращение будет происходить к встроенной функции max и пользовательской bar.

Вложенные функции

Другой разновидностью функций, доступных в одном М-файле, являются вложенные функции. Если подфункция является внешней по отношению к основной функции, то вложенная функция является внутренней. В силу этого обстоятельства переменные из рабочей среды основной функции доступны и во вложенной функции. Простейшая структура функции main, содержащей вложенную fnested, представлена в листинге 5.13.

Листинг 5.13. Простейшая вложенная функция

function main; alp = 5.3; bet = 9.1;

fl = fnested(1.1, 2.1)

function z = fnested(x, y)

z = хл3 - 2*ул3 + 3*(хл2 + ул2) - х*у + 9 + alp*BET;

end

end

Сравните эту функцию с функцией simplel из листинга 5.10, где функция f реализовалась как подфункция, и переменные alp и бет были неизвестны внутри подфункции. Теперь переменные alp и bet доступны в теле функции. При написании вложенных функций следует использовать оператор end для закрытия тела функции. Поэтому вложенная функция может размещаться в любом месте тела функции, ее содержащей. Основная функция также завершается оператором end. В одном М-файле допускается использование подфункций и вложенных функций одновременно, но тогда последним оператором подфункции должен быть end.


Уровень вложенности функций не ограничен. Поэтому при многоуровневом вложении возникает вопрос, какие вызовы допустимы, а какие мет. Функция может обратиться к своей вложенной функции, но не может использовать вложенную функцию нижнего уровня. Вложенная функция может обратиться к функции того же уровня. Функция нижнего уровня может вызвать функцию верхнего уровня, в которую она вложена, и все функции, доступные из нее. На практике такой сложной структуры вложенности функций, как правило, не требу ется.

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

Вложенные функции могут быть доступны не голько в М-файле. если использовать указатель на вложенную функцию. В игстинге 5.14 приведен пример такого использования вложенной функции для создания двух однотипных функции с разными параметрами.

Листинг 5.14. Указатель на вложенную функцию

function pointer = f ixed parin(a. b, с) % а, о, с - параметры процесса. I Создание указателч на вложенную функцию pointer = @process;

function у = process (t) у = asin(b.*t + с);

end

end

Запишите функцию f ixedparm в текущий каталог и выполните команды:

» f = fixed parm (1.5, 2, 0) ;

>> g = £ixed parm(1, 10, 25);

» fplot(f. [-2, 2])

>> hold on;

» fplot{g, [-2, 2])


В результате будут построены графики двух разных функций. Таким образом, созданы две функции f и д, зависящие от одной переменной, для кото-; рых значения параметров зафиксированы на момент обращения к функции fixed parra.

Приватные функции

Простейший прием сделать некоторые функции видимыми или нет, состоит в размещении м-файлов в рабочих каталогах. Определенная структура каталога с пользовательскими файл-функциями позволяет задать некоторые вспомогательные функции, которые используются только файл-функциями, содержащимися в м-файлах данного каталога, а для файл-функций из других каталогов являются недоступными. Для этого следует создать подкаталог с именем private и разместить в нем вспомогательные файл-функции. Рисунок 5.8 поясняет доступ к приватным функциям.

~Гл1 work!

private

I— funl 1— fun2.m

—calc.m

—myplotm

work2

private I— funl.m — fun2.m

—test.m

main.m

Файл-функции test и main не имеют доступа к приватным функциям, размещенным в подкаталоге private другого каталога.

Рис. 5.8. Схема доступа к приватным функциям

Разбиение М-файла на ячейки

Вернемся теперь к файл-программам и обсудим удобное средство выполнения отдельных их частей. Один из способов — выделение фрагмента кода и



0 ... 79 80 81 82 83 84 85 ... 365