包创建名称空间
包文件夹
包是特殊的文件夹,可以包含类文件夹、函数和类定义文件以及其他包。类和函数的名称的作用域是包文件夹。包是一个名称空间,其中的名称必须是唯一的。函数名和类名只能在包中唯一。使用包提供了组织类和函数的方法。包还允许您在不同的包中重用类和函数的名称。
请注意
在MATLAB之前创建的类不支持包®版本7.6(即,不使用classdef
).
包文件夹总是以+
的性格。例如,
+ mypack + mypack / pkfcn。m %一个包函数+mypack/@myClass %一个包中的类文件夹
顶级包文件夹的父文件夹必须在MATLAB路径上。
列出包的内容
方法列出包的内容帮助
命令:
帮助事件
事件的内容:EventData -事件。EVENTDATA事件数据的基类。对象属性事件的事件数据。LISTENER监听对象proplistener -事件。属性事件的监听器对象
你也可以使用什么
命令:
什么事件
目录Y:xxx\matlab\toolbox\matlab\lang\+event EventData PropertyEvent监听器proplistener中的类
内部包
MathWorks®保留使用已命名的包内部
用于内部MATLAB代码使用的效用函数。类的函数内部
软件包仅供MathWorks使用。类的函数或类内部
包是气馁。这些函数和类不能保证从一个版本到下一个版本以一致的方式工作。在任何后续版本中,这些函数和类都可能从MATLAB软件中删除,而无需通知,也无需在产品发布说明中提供文档。
引用包中的包成员
包中所有对包、函数和类的引用都必须使用包名前缀,除非导入包。(见进口类)。例如,调用这个包函数:
+ mypack / pkfcn.m
这个语法:
z = mypack.pkfcn (x, y);
定义不使用包前缀。例如,函数定义行pkfcn.m
函数只包含函数名:
函数z = pkfcn(x,y)
定义一个只有类名的包类:
classdef myClass
但是用包前缀调用它:
obj = mypack.myClass (__arg1,最长,…);
调用类方法不需要包名,因为您有类的对象。你可以使用点或函数表示法:
obj.myMethod (arg) myMethod (obj, arg)
静态方法需要完整的类名,其中包括包名:
mypack.myClass.stMethod (arg)
从包外部引用包成员
包中包含的函数、类和其他包的作用域是该包的。要引用任何包成员,请在包名前加上成员名,中间用一个点隔开。例如,以下语句创建的实例MyClass
,包含在mypack
包中。
obj = mypack.MyClass;
访问类成员-各种场景
本节向您展示如何从包外部访问各种包成员。假设您有一个包mypack
内容如下:
+ mypack + mypack / myFcn。m + mypack / @MyFirstClass + mypack / @MyFirstClass / myFcn。m + mypack / @MyFirstClass / otherFcn。m + mypack / @MyFirstClass / MyFirstClass。m + mypack / @MySecondClass + mypack / @MySecondClass / MySecondClass。m + mypack / + mysubpack + mypack / + mysubpack / myFcn.m
调用myFcn
函数mypack
:
mypack.myFcn (arg)
中创建每个类的实例mypack
:
其中obj1 = mypack.MyFirstClass;methoda = mypack.MySecondClass (arg);
调用myFcn
包中的函数mysubpack
:
mypack.mysubpack.myFcn (__arg1、最长);
如果mypack。MyFirstClass
有一个方法叫做myFcn
,像对对象的任何方法调用一样调用它:
obj = mypack.MyFirstClass;myFcn (obj, arg);
如果mypack。MyFirstClass
有一个属性叫做MyProp
,使用点表示法和对象赋值:
obj = mypack.MyFirstClass;obj。MyProp = x;
包和MATLAB路径
您不能将包文件夹添加到MATLAB路径,但必须将包父文件夹添加到MATLAB路径。如果包的父文件夹不在MATLAB路径上,包成员是不可访问的,即使包文件夹是当前文件夹。将包文件夹设为当前文件夹还不足以将包父文件夹添加到路径中。
包成员的作用域保持在包内。始终使用包名引用包成员。或者,将包导入调用包成员的函数中,参见进口类.
包文件夹不会遮蔽路径后面的其他包文件夹,而类会遮蔽其他类。如果两个或多个包具有相同的名称,MATLAB将它们都视为一个包。如果不同路径文件夹中的冗余命名包定义了相同的函数名,那么MATLAB只能找到其中一个函数。
解决冗余的名字
假设一个包和一个类具有相同的名称。例如:
fldr_1 / + foo fldr_2 / @foo / foo.m
调用这foo
返回可执行类构造函数的路径:
>> which foo fldr_2/@foo/foo.m
函数和包可以具有相同的名称。然而,包名本身并不是标识符。因此,如果单独出现冗余名称,则标识函数。单独执行包名将返回错误。
包函数vs.静态方法
在包和类名称相同的情况下,包函数优先于静态方法。例如,路径文件夹fldrA
包含包函数和路径文件夹fldrB
包含一个类静态方法:
fldrA / + foo / bar。bar是包foo fldrB/@foo/bar中的一个函数。bar是类foo的一个静态方法
调用这foo.bar
返回包函数的路径:
哪一个foo.bar
fldrA \ + foo \酒吧。M %包函数
如果同一个路径文件夹包含同名的包文件夹和类文件夹,则包函数优先于静态方法。
fldr / @foo / bar.mbar是foo类的一个静态方法fldr / + foo / bar.m% bar是包foo中的一个函数
调用这foo.bar
返回包函数的路径:
哪一个foo.bar
fldr / + foo / bar.m
如果一个路径文件夹fldr
包含一个classdef
文件喷火
它定义了一个静态方法酒吧
同一个文件夹包含一个包+ foo
它包含一个包函数酒吧
.
fldr / foo.mbar是foo类的一个静态方法fldr / + foo / bar.m% bar是包foo中的一个函数
调用这foo.bar
返回包函数的路径:
哪一个foo.bar
fldr / + foo / bar.m