exponenta event banner

Выбрать синтаксис команды или функции

MATLAB ® имеет два способа вызова функций: синтаксис функций и синтаксис команд. На этой странице рассматриваются различия между этими форматами синтаксиса и способы предотвращения распространенных ошибок, связанных с синтаксисом команд.

Для получения вводной информации о функциях вызова см. раздел Функции вызова. Сведения, связанные с определением функций, см. в разделе Создание функций в файлах.

Синтаксис команды и синтаксис функции

В MATLAB эти операторы эквивалентны:

load durer.mat        % Command syntax
load('durer.mat')     % Function syntax

Эту эквивалентность иногда называют двойственностью команда-функция.

Все функции поддерживают этот стандартный синтаксис функций:

[output1, ..., outputM] = functionName(input1, ..., inputN)

В синтаксисе функции входными данными могут быть данные, переменные и даже выражения MATLAB. Если вход - это данные, например, числовое значение 2 или строковый массив ["a" "b" "c"]MATLAB передает его функции как есть. Если входной сигнал является переменной, MATLAB передает назначенное ему значение. Если ввод является выражением, например 2+2 или sin(2*pi)MATLAB сначала вычисляет его и передает результат функции. Если функции имеют выходы, их можно назначить переменным, как показано в приведенном выше примере синтаксиса.

Синтаксис команды проще, но более ограничен. Чтобы использовать его, разделяйте входные данные пробелами, а не запятыми, и не заключите их в круглые скобки.

functionName input1 ... inputN

С помощью синтаксиса команд MATLAB передает все входы в виде символьных векторов (то есть как если бы они были заключены в одинарные кавычки) и не назначает выходы переменным. Для передачи типа данных, отличного от символьного вектора, используйте синтаксис функции. Для передачи значения, содержащего пробел, имеются две опции. Одним из них является использование синтаксиса функции. Другая заключается в том, чтобы поместить отдельные кавычки вокруг значения. В противном случае MATLAB рассматривает пространство как разделение значения на несколько входных данных.

Если переменной присвоено значение, необходимо использовать синтаксис функции для передачи значения функции. Синтаксис команды всегда передает входные данные в виде векторов символов и не может передавать переменные значения. Например, создайте переменную и вызовите disp функция с синтаксисом функции для передачи значения переменной:

A = 123;
disp(A)

Этот код возвращает ожидаемый результат,

123

Нельзя использовать синтаксис команды для передачи значения A, потому что этот звонок

disp A

эквивалентно

disp('A')

и возвращает

A

Избегать распространенных синтаксических ошибок

Предположим, что рабочая область содержит следующие переменные:

filename = 'accounts.txt';
A = int8(1:8);
B = A;

Следующая таблица иллюстрирует распространенные неправильные применения синтаксиса команд.

Эта команда...Эквивалентно...Правильный синтаксис для передаваемого значения
open filenameopen('filename')open(filename)
isequal A Bisequal('A','B')isequal(A,B)
strcmp class(A) int8strcmp('class(A)','int8')strcmp(class(A),'int8')
cd tempdircd('tempdir')cd(tempdir)
isnumeric 500isnumeric('500')isnumeric(500)
round 3.499round('3.499'), что эквивалентно round([51 46 52 57 57])round(3.499)
disp hello worlddisp('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')

Как MATLAB распознает синтаксис команды

Рассмотрим потенциально двусмысленное утверждение

ls ./d

Это может быть звонок в ls функция с './d' в качестве своего аргумента. Он также может представлять деление на элементы в массиве ls, используя переменную d в качестве делителя.

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

Как правило, когда MATLAB распознает идентификатор (который может называть функцию или переменную), он анализирует символы, следующие за идентификатором, чтобы определить тип выражения, следующим образом:

  • Знак равенства (=) подразумевает присвоение. Например:

    ls =d
  • Открытая скобка после идентификатора подразумевает вызов функции. Например:

    ls('./d')
  • Пробел после идентификатора, но не после потенциального оператора, подразумевает вызов функции с использованием синтаксиса команды. Например:

    ls ./d
  • Помещения с обеих сторон потенциального оператора или без помещений с обеих сторон оператора подразумевают операцию над переменными. Например, эти операторы эквивалентны:

    ls ./ d
    
    ls./d

Поэтому MATLAB рассматривает потенциально неоднозначное утверждение ls ./d как вызов ls с использованием синтаксиса команды.

Лучше всего избегать определения имен переменных, конфликтующих с общими функциями, чтобы предотвратить неоднозначность.

См. также

|