Этот ответ может быть несколько косвенным, но еще одна тема, о которой здесь следует упомянуть, - это использование вложенных функций для управления памятью.
Как уже было установлено в других ответах, нет необходимости в global
переменных, если данные, которые вы передаете в функцию, не изменены (так как они будут переданы по ссылке). Если он изменен (и, следовательно, передан по значению), использование переменной global
сэкономит вам память. Тем не менее, global
переменные могут быть несколько "невежливыми" по следующим причинам:
- Вы должны сделать заявление, подобное
global varName
везде, где они вам нужны.
- Концептуально может быть немного беспорядочно пытаться отслеживать, когда и как они изменены, особенно если они распределены по нескольким m-файлам.
- Пользователь может легко взломать ваш код с помощью некорректного
clear global
, который очищает все глобальные переменные.
Альтернатива global
переменным была упомянута в первом наборе документации, который вы цитировали : вложенные функции. Сразу после цитируемой вами цитаты приведен пример кода (который я немного отформатировал здесь):
function myfun
A = magic(500);
setrowval(400, 0);
disp('The new value of A(399:401,1:10) is')
A(399:401,1:10)
function setrowval(row, value)
A(row,:) = value;
end
end
В этом примере функция setrowval
является вложенной внутри функции myfun
. Переменная A
в рабочей области myfun
доступна в пределах setrowval
(как если бы она была объявлена global
в каждой). Вложенная функция изменяет эту общую переменную, избегая, таким образом, дополнительного выделения памяти. Вам не нужно беспокоиться о том, что пользователь случайно что-то очистит, и (на мой взгляд) это немного чище и легче следовать, чем объявление global
переменных.