Если у вас есть функция, которая загружает данные из MAT-файла, и найдите, что MATLAB® не возвращает ожидаемые результаты, проверяйте, совместно используют ли какие-либо переменные в MAT-файле то же имя как функция MATLAB. Общие имена переменных, которые конфликтуют с именами функций, включают i
, j
, mode
, char
, size
и path
.
Эти неожиданные результаты происходят, потому что, когда вы выполняете функцию, MATLAB предварительно обрабатывает весь код в функции прежде, чем запустить ее. Однако вызовы load
не предварительно обрабатываются, означая, что MATLAB не знает о переменных в вашем MAT-файле. Переменные, которые совместно используют то же имя как функции MATLAB, поэтому, предварительно обрабатываются как функции MATLAB, вызывая неожиданные результаты. Это отличается от скриптов, которые MATLAB предварительно обрабатывает и выполняет линию за линией, подобный Командному окну.
Например, рассмотрите MAT-файл с переменными height
, width
и length
. Если вы загружаете эти переменные в функции, такие как findVolume
, MATLAB интерпретирует ссылку на length
как вызов функции length
MATLAB и возвращает ошибку.
function vol = findVolume(myfile) load(myfile); vol = height * width * length; end
Error using length Not enough input arguments.
Чтобы избежать беспорядка, при определении функции, выберите одну (или больше) этих подходов:
Загрузите переменные в массив структур. Например:
function vol = findVolume(myfile) dims = load(myfile); vol = dims.height * dims.width * dims.length; end
Явным образом включайте имена переменных в вызове функции load
. Например:
function vol = findVolume(myfile) load(myfile,'height','width','length') vol = height * width * length; end
Инициализируйте переменные в функции прежде, чем вызвать load
. Чтобы инициализировать переменную, присвойте его пустой матрице или пустому символьному вектору. Например:
function vol = findVolume(myfile)
height = [];
width = [];
length = [];
load(myfile);
vol = height * width * length;
Чтобы определить, сопоставлено ли конкретное имя переменной с функцией MATLAB, используйте функцию exist
. Возвращаемое значение 5 решает, что именем является встроенная функция MATLAB.