主要内容

包含类定义的文件夹

路径上的类定义

要调用类方法,类定义必须在MATLAB上®路径,如下一节所述。

类和路径文件夹

有两种类型的文件夹可以包含类定义文件。

  • 路径文件夹-该文件夹在MATLAB路径上,且文件夹名称不是以的性格。当您希望在一个文件夹中包含多个类时,请使用这种类型的文件夹。但是,整个类定义必须包含在一个文件中。

  • 类文件夹——文件夹名以@字符开头,然后是类名。文件夹不在MATLAB路径上,但它的父文件夹在路径上。当您希望为一个类定义使用多个文件时,请使用这种类型的文件夹。

看到路径函数的信息关于MATLAB路径。

使用路径文件夹

文件夹中的类定义文件位于MATLAB路径上。因此,放置在路径文件夹中的类定义的行为与任何普通函数的优先级类似—在MATLAB路径中第一次出现的名称优先于随后出现的所有相同名称。

属性指定的类的名称必须与每个类定义文件的名称匹配classdef关键字。使用路径文件夹可以避免为每个类创建单独的类文件夹。但是,整个类定义(包括所有方法)必须包含在一个文件中。

假设你在一个文件夹中定义了三个类:

…/ path_folder / MyClass1。m…/ path_folder / MyClass2。m…/ path_folder / MyClass3.m

要使用这些类,请添加path_folder到你的MATLAB路径:

目录path_folder

使用类文件夹

类文件夹名称总是以字符,后跟类名作为文件夹名。类文件夹必须包含在路径文件夹中,但类文件夹不在MATLAB路径中。将类定义文件放在类文件夹中,该类文件夹也可以包含单独的方法文件。类定义文件必须与类文件夹具有相同的名称(没有字符)。类定义(以classdef关键字)必须出现在文件中任何其他代码之前(空白和注释不构成代码)。

…/ parent_folder / @MyClass / MyClass。m…/ parent_folder / @MyClass / myMethod1。m…/ parent_folder / @MyClass / myMethod2.m

每个文件夹只定义一个类。所有文件都有一个.m扩展或,对于MATLAB版本R2018a和更高版本,独立的方法可以与live函数.mlx扩展。

当需要为类定义使用多个文件时,请使用类文件夹。MATLAB将类文件夹中的任何函数文件视为类的方法。函数文件可以是MATLAB代码(.m)、Live Code文件格式(.mlx)、MEX函数(平台相关的扩展)和P-code文件(每分钟).

类文件的优势在于,MATLAB可以显式地将文件夹中的任何文件标识为类的方法。有关更多信息,请参见更改路径以更新类定义

每个文件的基名必须是有效的MATLAB函数名。有效的函数名以字母字符开头,可以包含字母、数字或下划线。有关更多信息,请参见单独文件中的方法

类文件夹中的私有文件夹中的函数

控件上的文件夹中定义的函数只能访问私有文件夹中的函数私人文件夹中。定义在a中的任何函数私人类文件夹中的文件夹成为类的方法私人访问。

如果类文件夹包含私人文件夹中定义的函数,只有在该文件夹中定义的类才能访问私人文件夹中。子类不能访问父类的私有函数。有关私有文件夹的更多信息,请参见私有函数

如果想要子类访问父类的私有函数,请将这些函数定义为父类的受保护方法。属性指定方法访问属性设置为受保护的

分派到私有文件夹中的方法

如果一个类在私人中定义的私有函数和局部函数的调度时,MATLAB遵循这些优先规则classdef文件:

  • 使用点符号(obj.methodName的函数私人中定义的局部函数优先于classdef文件。

  • 使用函数符号(methodName (obj)的局部函数classdef中的函数优先于文件私人文件夹中。

私有文件夹中没有类定义

不能将类定义(classdef因为这样做将不满足类或路径文件夹的要求。

类优先,MATLAB路径

当有多个具有相同名称的类定义文件时,文件在MATLAB路径上的位置决定了文件的优先级。路径上的类之前的所有类定义文件优先,无论这些定义是否包含在类文件夹中。类优先于路径上稍后出现的所有类定义文件。

例如,考虑一个包含以下文件夹的路径,其中包含所指示的文件。

顺序的路径 文件夹和文件 文件定义

1

fldr1 / Foo.m

喷火

2

fldr2 / Foo.m

函数喷火

3.

fldr3 / @Foo / Foo.m

喷火

4

fldr4 / @Foo / bar.m

方法酒吧

5

fldr5 / Foo.m

喷火

下面是MATLAB用于确定哪个版本的逻辑喷火电话:

fldr1 / Foo.m优先于班级fldr3 / @Foo因为:

  • fldr1 / Foo.m之前fldr3 / @Foo的道路上

fldr3 / @Foo优先于函数fldr2 / Foo.m因为:

  • fldr3 / @Foo类是否在类文件夹中

  • fldr2 / Foo.m不是一门课

  • 类文件夹中的类优先于函数

函数fldr2 / Foo.m优先于班级fldr5 / Foo.m因为:

  • fldr2 / Foo.m是上课前fldr5 / Foo.m的道路上

  • fldr5 / Foo.m不在类文件夹中

  • 没有在类文件夹中定义的类遵循相对于函数的路径顺序。

fldr3 / @Foo优先于班级fldr4 / @Foo因为:

  • 该方法酒吧不被认为是喷火类中定义的fldr3 / @Foo

如果fldr3 / @Foo / Foo.m不包含classdef关键字(即,它是在版本7.6之前创建的MATLAB类),然后fldr4 / @Foo / bar.m成为一种方法喷火类中定义的fldr3 / @Foo

在类文件夹中定义的类的先前行为

在MATLAB版本5到7中,类文件夹不会阴影其他具有相同名称的类文件夹,但驻留在后面的路径文件夹中。相反,类使用来自具有相同名称的所有类文件夹的方法的组合来定义类。此行为不再受支持。金宝app

为了向后兼容,类文件夹中定义的类总是优先于具有相同名称的函数和脚本。这种优先级适用于路径上出现在这些类之前的函数和脚本。

更改路径以更新类定义

改变你的MATLAB路径可以改变类的类定义文件(见路径).但是,对于在路径文件夹中定义的类(即不在类中定义的类),必须在MATLAB识别新文件夹为当前类定义之前清除该类。

类文件夹中的类定义

假设您定义了一个类的两个版本喷火在两个文件夹,fldAfldB

fldA / + FooPkg / @Foo / Foo.mfldB / + FooPkg / @Foo / Foo.m

添加文件夹fldA到小路的顶端。

目录fldA

创建类的实例FooPkg。喷火.MATLAB使用fldA / + FooPkg / @Foo / Foo.m作为类定义。

一个= FooPkg.Foo;

将当前文件夹更改为fldB

cdfldB

当前文件夹总是位于路径的第一个。因此,MATLAB发现fldB / + FooPkg / @Foo / Foo.m作为类的定义FooPkg。喷火

b = FooPkg.Foo;

MATLAB自动更新已有的实例,一个,以使用新的类定义fldB

路径文件夹中的类定义

假设您定义了一个类的两个版本喷火在两个文件夹,fldAfldB,但不要使用类文件夹。

fldA / + FooPkg / Foo。m fldB / + FooPkg / Foo.m

添加文件夹fldA到小路的顶端。

目录fldA

创建类的实例FooPkg。喷火.MATLAB使用fldA / + FooPkg / @Foo / Foo.m作为类定义。

一个= FooPkg.Foo;

将当前文件夹更改为fldB

cdfldB

当前文件夹实际上是路径的顶部。然而,MATLAB没有识别fldB / + FooPkg / Foo.m作为类的定义FooPkg。喷火.MATLAB继续使用原始的类定义,直到清除类。

用…的定义FooPkg。喷火foldB、清晰FooPkg。喷火

清晰的FooPkg。喷火

MATLAB自动更新现有对象,以符合类定义fldB.通常,清除实例变量是不必要的。

相关的话题