要调用类方法,类定义必须在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路径上的位置决定了文件的优先级。路径上的类之前的所有类定义文件优先,无论这些定义是否包含在类文件夹中。类优先于路径上稍后出现的所有类定义文件。
例如,考虑一个包含以下文件夹的路径,其中包含所指示的文件。
顺序的路径 | 文件夹和文件 | 文件定义 |
---|---|---|
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
作为类定义。
一个= 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
作为类定义。
一个= FooPkg.Foo;
将当前文件夹更改为fldB
.
cdfldB
当前文件夹实际上是路径的顶部。然而,MATLAB没有识别fldB / + FooPkg / Foo.m
作为类的定义FooPkg。喷火
.MATLAB继续使用原始的类定义,直到清除类。
用…的定义FooPkg。喷火
在foldB
、清晰FooPkg。喷火
.
清晰的FooPkg。喷火
MATLAB自动更新现有对象,以符合类定义fldB
.通常,清除实例变量是不必要的。