Код имеет прозрачный переменный доступ, если MATLAB® может идентифицировать каждый переменный доступ путем сканирования кода при игнорировании комментариев, векторов символов и строковых литералов. Переменный доступ включает чтение, добавление, удаление или изменение переменных рабочей области.
В этих контекстах кодирования MATLAB требует прозрачного переменного доступа.
Блоки валидации аргумента функции. Для получения дополнительной информации смотрите Ограничения на Переменный и Функциональный доступ
Тело parfor
цикл или spmd
блок. Для получения дополнительной информации смотрите, Гарантируют Прозрачность в циклах parfor или spmd Операторах (Parallel Computing Toolbox).
В этих контекстах непрозрачный переменный доступ приводит к ошибкам времени выполнения.
Прозрачный код относится к именам переменных явным образом. Например, в этом коде, 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
.
Вот частичный список функций и кодирования, которое вы не можете использовать с прозрачным переменным доступом.
Скрипты
MEX-функции, которые получают доступ к переменным рабочей области динамически, например, при помощи mexGetVariable
.
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
функции, чтобы создать переменные в другой рабочей области из рабочей области, которая требует прозрачности.