#matlab
#matlab
Вопрос:
Чтобы четко описать, что я имею в виду, я просто привожу здесь пример:
function y = f(x,a)
global a
y = f1(x);
function y = f1(x)
global a
y = x a;
Здесь я хочу, чтобы переменная ‘a’ использовалась как глобальная переменная, которая может быть вызвана подфункцией ‘f1’ для вычисления $ x a $. (Моя цель — сократить преобразование параметров)
Но эта функция не работает, если я не определю новую переменную ‘b’, чтобы восстановить значение ‘a’.
Вопрос в том, как я могу сделать ‘a’ глобальной переменной напрямую, без определения новой переменной?
Ответ №1:
Я бы не рекомендовал вам использовать глобальные переменные, тем более что вы передаете a в функцию f
.
Желаемое поведение может быть получено без глобальных переменных, но с использованием вложенных функций:
function y = f(x,a)
y = f1(x);
function y = f1(x)
y = x a;
end
end
Ответ №2:
Вы можете попробовать
a=evalin('base','a');
чтобы получить значение a
из базовой рабочей области. Глобальные переменные обычно не рекомендуются.
Комментарии:
1. При всем должном уважении, это даже хуже, чем просто глобальные переменные.
eval
,evalin
иassignin
следует использовать только тогда, когда другие варианты невозможны. Ваше решение будет работать, но поддерживать код будет намного сложнее.2. Да, я согласен в принципе. На каком-то уровне оператору необходимо передать значение
a
функции. Я бы предпочел передать его явно.