Main Content

选择命令语法或函数语法

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+2sin(2*pi),则 MATLAB 先对其求值,再将结果传递给函数。如果函数有多个输出,您可以将它们赋给多个变量,如上面的示例语法所示。

命令语法更简单,但更受限制。要使用命令语法,请用空格而不是逗号来分隔输入,并且不需要将输入括入括号。

functionName input1 ... inputN

使用命令语法时,MATLAB 将所有输入作为字符向量传递(也就是说,就像它们用单引号引起来一样),并且不将输出赋给用户定义的变量。如果函数返回一个输出,则将该输出赋给 ans 变量。要传递字符向量以外的数据类型,请使用函数语法。要传递包含空格的值,您有两种选择。一种是使用函数语法。另一种是用单引号将值引起来。否则,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")

传递变量名称

某些函数期望获取变量名称的字符向量,例如 saveloadclearwhos。例如,

whos -file durer.mat X

请求示例文件 durer.mat 中有关变量 X 的信息。此命令等同于

whos('-file','durer.mat','X')

MATLAB 如何识别命令语法

以下面可能具有多义性的语句为例:

ls ./d

该语句可能是调用 ls 函数并将 './d' 作为其参量。它也可能表示使用变量 d 作为除数对数组 ls 执行按元素除法。

如果您在命令行中发出此语句,MATLAB 使用语法规则、当前工作区和路径确定 lsd 是函数还是变量。但是,某些组件(例如代码分析器和编辑器/调试器)在运行时不需要引用路径或工作区。当您使用这些组件时,MATLAB 会使用语法规则来确定表达式是否为使用命令语法的函数调用。

通常,当 MATLAB 识别出一个标识符(可能用来命名一个函数或变量)时,它会分析该标识符后面的字符,以确定表达式的类型,如下所示:

  • 等号 (=) 表示赋值。例如:

    ls =d
  • 标识符之后的左括号表示函数调用。例如:

    ls('./d')
  • 标识符后面的空格(但不在潜在的运算符之后)表示使用命令语法的函数调用。例如:

    ls ./d
  • 潜在运算符的两侧带有空格,或者该运算符任意一侧没有空格,均表示变量运算。例如,以下语句是等效的:

    ls ./ d
    
    ls./d

因此,MATLAB 将可能具有多义性的语句 ls ./d 视为使用命令语法调用 ls 函数。

最佳做法是避免定义与公共函数冲突的变量名称,以防止出现多义性,并在运算符周围保留一致的空格,或使用显式括号调用函数。

另请参阅

|