本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

命令与函数语法

命令与函数语法

在 MATLAB® 中,以下语句是等效的:

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

这种等效有时称为命令-函数二元性

所有函数都支持以下标准函数语法

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

如果您不需要函数的任何输出,并且所有输入都是字符向量(即置于单引号内的文本),则可以使用以下更为简单的命令语法

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 filenameopen('filename')open(filename)
isequal A Bisequal('A','B')isequal(A,B)
strcmp class(A) int8strcmp('class(A)','int8')strcmp(class(A),'int8')
cd matlabrootcd('matlabroot')cd(matlabroot)
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 "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

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

最佳做法是避免定义与公共函数冲突的变量名称,以防止出现任何多义性。