Переменные в MATLAB передаются с использованием «вызова по значению» ( с некоторыми исключениями ), поэтому любое значение, которое вы передаете в функцию и модифицируете, должно быть возвращено из функции и помещено в новыйПеременная или старая переменная перезаписана.Возврат значения переменной из функции прост: вы просто помещаете имя переменной в список выходных аргументов для функции.
Для вашего примера вы должны сделать это:
function A = test(A)
A = test1(A); %# Overwrite A with value returned from test1
A = test2(A); %# Overwrite A with value returned from test2
end
function A = test1(A) %# Pass in A and return a modified A
#% Modify A
end
function A = test2(A) %# Pass in A and return a modified A
#% Modify A
end
Следует помнить одну вещь: переменная область действия .Каждая функция имеет свое собственное рабочее пространство для хранения своих локальных переменных, поэтому в приведенном выше примере фактически есть 3 уникальные A
переменные: одна в рабочей области test
, одна в рабочей области test1
и одна врабочее пространство test2
.То, что они названы одинаково, не означает, что все они имеют одинаковое значение.
Например, когда вы вызываете test1
из test
, значение сохраняется в переменной A
в test
копируется в переменную A
в test1
.Когда test1
изменяет свою локальную копию A
, значение A
в test
не изменяется.Чтобы обновить значение A
в test
, в него должно быть скопировано возвращаемое значение из test1
.