选择命令语法或函数语法
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 将所有输入作为字符向量传递(也就是说,就像它们用单引号引起来一样),并且不将输出赋给用户定义的变量。如果函数返回一个输出,则将该输出赋给 ans
变量。要传递字符向量以外的数据类型,请使用函数语法。要传递包含空格的值,您有两种选择。一种是使用函数语法。另一种是用单引号将值引起来。否则,MATLAB 会将您的值视为由空格拆分的多个输入。
如果为变量进行了赋值,则必须使用函数语法将该值传递给函数。命令语法始终将输入作为字符向量传递,不能传递变量值。例如,创建一个变量并通过函数语法调用 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 tempdir | cd('tempdir') | cd(tempdir) |
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 "string" | disp('"string"') | disp("string") |
传递变量名称
某些函数期望获取变量名称的字符向量,例如 save
、load
、clear
和 whos
。例如,
whos -file durer.mat X
请求示例文件 durer.mat
中有关变量 X
的信息。此命令等同于
whos('-file','durer.mat','X')
MATLAB 如何识别命令语法
以下面可能具有多义性的语句为例:
ls ./d
该语句可能是调用 ls
函数并将 './d'
作为其参量。它也可能表示使用变量 d
作为除数对数组 ls
执行按元素除法。
如果您在命令行中发出此语句,MATLAB 使用语法规则、当前工作区和路径确定 ls
和 d
是函数还是变量。但是,某些组件(例如代码分析器和编辑器/调试器)在运行时不需要引用路径或工作区。当您使用这些组件时,MATLAB 会使用语法规则来确定表达式是否为使用命令语法的函数调用。
通常,当 MATLAB 识别出一个标识符(可能用来命名一个函数或变量)时,它会分析该标识符后面的字符,以确定表达式的类型,如下所示:
等号 (
=
) 表示赋值。例如:ls =d
标识符之后的左括号表示函数调用。例如:
ls('./d')
标识符后面的空格(但不在潜在的运算符之后)表示使用命令语法的函数调用。例如:
ls ./d
潜在运算符的两侧带有空格,或者该运算符任意一侧没有空格,均表示变量运算。例如,以下语句是等效的:
ls ./ d ls./d
因此,MATLAB 将可能具有多义性的语句 ls ./d
视为使用命令语法调用 ls
函数。
最佳做法是避免定义与公共函数冲突的变量名称,以防止出现多义性,并在运算符周围保留一致的空格,或使用显式括号调用函数。