В MATLAB® эти операторы эквивалентны:
load durer.mat % Command syntax load('durer.mat') % Function syntax
Эта эквивалентность иногда упоминается как command-function duality.
Все функции поддерживают этот стандартный function syntax:
[output1, ..., outputM] = functionName(input1, ..., inputN)
Если вы не требуете никаких выходных параметров от функции, и все входные параметры являются векторами символов (то есть, текст, заключенный в одинарные кавычки), можно использовать этот более простой command syntax:
functionName input1 ... inputN
С синтаксисом команд вы разделяете входные параметры пробелами, а не запятыми, и не заключаете входные параметры в круглые скобки. Синтаксис команд всегда передает входные параметры как векторы символов. Чтобы использовать строки в качестве входных параметров, используйте синтаксис функций. Если вектор символов содержит пробел, используйте синтаксис функций. Например:
Когда входной параметр функции является переменной, необходимо использовать синтаксис функций, чтобы передать значение функции. Синтаксис команд всегда передает входные параметры как векторы символов и не может передать значения переменных. Например, создайте переменную и вызовите функцию disp
с синтаксисом функций, чтобы передать значение переменной:
A = 123; disp(A)
Этот код возвращает ожидаемый результат,
123
Вы не можете использовать синтаксис команд, чтобы передать значение A
, потому что этот вызов
disp A
эквивалентно
disp('A')
и возвращается
A
Предположим, что ваша рабочая область содержит эти переменные:
filename = 'accounts.txt'; A = int8(1:8); B = A;
Следующая таблица иллюстрирует общие неправильные применения синтаксиса команд.
Эта команда... | Эквивалентно... | Правильный синтаксис для передающего значения |
---|---|---|
open filename | open('filename') | open(filename) |
isequal A B | isequal('A','B') | isequal(A,B) |
strcmp class(A) int8 | strcmp('class(A)','int8') | strcmp(class(A),'int8') |
cd matlabroot | cd('matlabroot') | cd(matlabroot) |
isnumeric 500 | isnumeric('500') | isnumeric(500) |
round 3.499 | round('3.499') , который эквивалентен round([51 46 52 57 57]) | round(3.499) |
disp hello world | disp('hello','world') | disp('hello world') |
disp "string" | disp('"string"') | disp("string") |
Некоторые функции ожидают векторы символов для имен переменных, таких как save
, load
, clear
и whos
. Например,
whos -file durer.mat X
запрашивает информацию о переменной X
в файле в качестве примера durer.mat
. Эта команда эквивалентна
whos('-file','durer.mat','X')
Рассмотрите потенциально неоднозначное выражение
ls ./d
Это могло быть вызовом функции ls
с папкой ./d
в качестве ее аргумента. Это также может быть поэлементое деление массива ls, где d - делитель.
Если вы вводите такое выражение в командной строке, MATLAB может получить доступ к текущей рабочей области и пути, чтобы определить, являются ли ls
и d
функциями или переменными. Однако некоторые компоненты, такие как Анализатор кода и Редактор/Отладчик, действуют независимо от пути или рабочей области. В тех случаях MATLAB использует синтаксические правила, чтобы определить, является ли выражение вызовом функции с помощью синтаксиса команд.
В целом, когда MATLAB распознает идентификатор (который может назвать функцию или переменную), он анализирует символы, которые следуют за идентификатором, чтобы определить тип выражения, можно следующим образом:
Знак "равно" (=
) подразумевает присвоение. Например:
ls =d
Открывающая скобка после идентификатора подразумевает вызов функции. Например:
ls('./d')
Пробел после идентификатора, но не после потенциального оператора, подразумевает вызов функции с помощью синтаксиса команд. Например:
ls ./d
Пробелы с обеих сторон потенциального оператора или никаких пробелов по обе стороны от оператора, подразумевают использование переменных. Например, эти операторы эквивалентны:
ls ./ d ls./d
Поэтому потенциально неоднозначное выражение ls ./d
является вызовом функции ls
использование синтаксиса команд.
Лучшая практика состоит в том, чтобы избегать таких имен переменных, которые конфликтуют с общими функциями, чтобы предотвратить любую неоднозначность.