包含类定义的文件夹
路径上的类定义
要调用类方法,类定义必须在MATLAB上®路径,如下一节所述。
类和路径文件夹
有两种类型的文件夹可以包含类定义文件。
路径文件夹——文件夹在MATLAB路径上,文件夹名不以
@
的性格。当您希望在一个文件夹中包含多个类时,请使用这种类型的文件夹。但是,整个类定义必须包含在一个类定义中.m
文件。类文件夹——文件夹名称以@字符开头,后跟类名称。该文件夹不在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和更高版本,独立方法可以是带有.mlx
扩展。
当您希望为类定义使用多个文件时,请使用类文件夹。MATLAB处理任何.m
文件中的类文件夹作为类的方法。类文件的优点是MATLAB可以显式地将文件夹中的任何文件识别为该类的方法。有关更多信息,请参见更改更新类定义的路径.
每个文件的基名必须是有效的MATLAB函数名。有效的函数名以字母字符开头,可以包含字母、数字或下划线。有关更多信息,请参见单独文件中的方法.
类文件夹中的私有文件夹中的函数
私有文件夹包含的函数只能从紧接在上面文件夹中定义的函数访问私人
文件夹中。定义在a中的任何函数私人
类文件夹中的文件夹成为类的方法私人
访问。
如果类文件夹包含私人
文件夹中定义的类才能访问定义在私人
文件夹中。子类不能访问超类的私有函数。有关私有文件夹的更多信息,请参见私有函数.
如果希望子类能够访问超类的私有函数,请将函数定义为超类的受保护方法。方法指定方法访问
属性设置为受保护的
.
分发到私有文件夹中的方法
类中定义函数私人
文件夹中,那么MATLAB在分配私有函数与定义在classdef
文件:
使用点表示法(
obj.methodName
), a中的一个函数私人
类中定义的本地函数优先于classdef
文件。使用函数符号(
methodName (obj)
中定义的局部函数classdef
的函数优先于私人
文件夹中。
私有文件夹中没有类定义
不能将类定义(classdef
因为这样做将不满足类或路径文件夹的要求。
类优先级和MATLAB路径
当有多个具有相同名称的类定义文件时,文件在MATLAB路径上的位置决定了文件的优先级。路径上类之前的所有类定义文件都具有优先级,无论定义是否包含在类文件夹中。类优先于路径上稍后出现的所有类定义文件。
例如,考虑一个包含以下文件夹的路径,其中包含所指出的文件。
路径顺序 | 文件夹和文件 | 文件定义 |
---|---|---|
1 |
|
类 |
2 |
|
函数 |
3. |
|
类 |
4 |
|
方法 |
5 |
|
类 |
这是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将新文件夹识别为当前类定义之前,您必须清除该类。
类文件夹中的类定义
假设定义了一个类的两个版本喷火
在两个文件夹中,fldA
而且fldB
.
fldA / + FooPkg / @Foo / Foo.mfldB / + FooPkg / @Foo / Foo.m
添加文件夹fldA
走到路的顶端。
目录fldA
创建类的实例FooPkg。喷火
.MATLAB使用fldA / + FooPkg / @Foo / Foo.m
作为类定义。
a = FooPkg.Foo;
将当前文件夹更改为fldB
.
cdfldB
当前文件夹总是在路径上的第一个。因此,MATLAB发现fldB / + FooPkg / @Foo / Foo.m
作为类的定义FooPkg。喷火
.
b = FooPkg.Foo;
MATLAB会自动更新现有的实例,一个
中使用新的类定义fldB
.
路径文件夹中的类定义
假设定义了一个类的两个版本喷火
在两个文件夹中,fldA
而且fldB
,但不要使用类文件夹。
fldA / + FooPkg / Foo。m fldB / + FooPkg / Foo.m
添加文件夹fldA
走到路的顶端。
目录fldA
创建类的实例FooPkg。喷火
.MATLAB使用fldA / + FooPkg / @Foo / Foo.m
作为类定义。
a = FooPkg.Foo;
将当前文件夹更改为fldB
.
cdfldB
当前文件夹实际上是路径的顶部。然而,MATLAB不能识别fldB / + FooPkg / Foo.m
作为类的定义FooPkg。喷火
.MATLAB继续使用原始的类定义,直到清除该类为止。
的定义FooPkg。喷火
在foldB
、清晰FooPkg。喷火
.
清晰的FooPkg。喷火
中的类定义,MATLAB自动更新现有的对象fldB
.通常,清除实例变量是不必要的。