Прозрачность в коде MATLAB

Код имеет прозрачный переменный доступ, если MATLAB® может идентифицировать каждый переменный доступ путем сканирования кода при игнорировании комментариев, векторов символов и строковых литералов. Переменный доступ включает чтение, добавление, удаление или изменение переменных рабочей области.

В этих контекстах кодирования MATLAB требует прозрачного переменного доступа.

В этих контекстах непрозрачный переменный доступ приводит к ошибкам времени выполнения.

Запись прозрачного кода

Прозрачный код относится к именам переменных явным образом. Например, в этом коде, MATLAB может идентифицировать X и ii как переменные.

X = zeros(1,10);
for ii = 1:10
    X(ii) = randi(9,1);
end

Однако в следующем вызове eval функция, MATLAB не может распознать переменные в операторе, который передается eval потому что вход является символьной строкой.

X = zeros(1,10);
for ii = 1:10
    eval('X(ii) = randi(9,1);')
end

Прежде, чем выполнить этот код, MATLAB видит вызов eval функция с одним аргументом, который является вектором символов 'X(ii) = randi(9,1);'.

Чтобы быть прозрачным, код должен относиться к именам переменных явным образом так, чтобы MATLAB мог идентифицировать переменные контролем. Используя eval функция с вектором символов 'X(ii) = randi(9,1);' средние значения, что MATLAB должен выполнить код перед способностью идентифицировать X и ii.

Вот частичный список функций и кодирования, которое вы не можете использовать с прозрачным переменным доступом.

  • evalevalcevalin, или assignin.

  • Скрипты

  • MEX-функции, которые получают доступ к переменным рабочей области динамически, например, при помощи mexGetVariable.

  • Самосозерцательные функции, такие как who и whos.

  • save и load команды, кроме тех случаев, когда результат load присвоен явным образом.

  • Любая динамическая ссылка имени, такая как использование clear команда.

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

clear X
clear('X')

Если код создает переменные рабочей области, но MATLAB может идентифицировать эти новые переменные только после выполнения кода, то этот код не имеет прозрачного переменного доступа.

Например, MATLAB не может определить, какие переменные загружаются из файла MAT, таким образом, этот оператор непрозрачен.

load foo.mat

Однако код, который присваивает загруженную переменную имени явным образом, прозрачен, потому что MATLAB может распознать, что имя на левой стороне относится к переменной рабочей области. Например, этот оператор загружает переменную X из файла MAT в рабочую область в переменной под названием X.

X = load('foo.mat','X');

Доступ к переменным должен быть прозрачным в рабочей области. Например, код не может использовать evalin, или assignin функции, чтобы создать переменные в другой рабочей области из рабочей области, которая требует прозрачности.

Похожие темы