Выберите Command Syntax или Function Syntax

MATLAB® имеет два способа вызвать функции, вызванные function syntax и command syntax. Эта страница обсуждает различия между этими форматами синтаксиса и как избежать частых ошибок, сопоставленных с синтаксисом команд.

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

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

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

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

Эта эквивалентность иногда упоминается как command-function duality.

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

[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загрузка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 функция с помощью синтаксиса команд.

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

Смотрите также

|