包创建命名空间
包文件夹
包是特殊的文件夹,可以包含类文件夹、函数和类定义文件以及其他包。类和函数的名称限定在包文件夹内。包是一个名称空间,其中的名称必须唯一。函数名和类名只能在包中唯一。使用包提供了一种组织类和函数的方法。包还允许在不同的包中重用类和函数的名称。
请注意
在MATLAB之前创建的类不支持包金宝app®版本7.6(即不使用classdef
).
包文件夹总是以+
的性格。例如,
+ mypack + mypack / pkfcn。一个包函数+mypack/@myClass %包中的类文件夹
顶层包文件夹的父目录必须位于MATLAB路径上。
列出一个包的内容
方法列出包的内容帮助
命令:
帮助事件
事件的内容:EventData -事件。EVENTDATA事件数据的基类。PROPERTYEVENT对象属性事件监听器事件的事件数据。LISTENER监听对象proplistener事件。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,arg2,…);
调用类方法不需要包名,因为您已经有了类的对象。你可以使用点或函数表示法:
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/MySecondClassm +mypack/+mysubpack +mypack/+mysubpack/myFcn.m
调用myFcn
函数mypack
:
mypack.myFcn (arg)
中创建每个类的实例mypack
:
obj1 = mypack.MyFirstClass;obj2 = 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
函数和包可以有相同的名称。然而,包名本身并不是一个标识符。因此,如果单独出现了冗余名称,则表示该函数。单独执行包名将返回错误。
包函数与静态方法
在包和类名称相同的情况下,包函数优先于静态方法。例如,path folderfldrA
包含包函数和路径文件夹fldrB
包含一个类静态方法:
fldrA / + foo / bar。m % bar是包foo fldrB/@foo/bar中的函数。bar是类foo的一个静态方法
呼叫这foo.bar
返回包函数的路径:
哪一个foo.bar
fldrA \ + foo \酒吧。M %包函数
在相同路径文件夹中包含同名包和类文件夹的情况下,包函数优先于静态方法。
fldr / @foo / bar.m% bar是类foo的一个静态方法fldr / + foo / bar.m% bar是包foo中的一个函数
呼叫这foo.bar
返回包函数的路径:
哪一个foo.bar
fldr / + foo / bar.m
如果一个路径文件夹fldr
包含一个classdef
文件喷火
它定义了一个静态方法酒吧
同一文件夹中包含一个包+ foo
它包含一个包函数酒吧
.
fldr / foo.m% bar是类foo的一个静态方法fldr / + foo / bar.m% bar是包foo中的一个函数
呼叫这foo.bar
返回包函数的路径:
哪一个foo.bar
fldr / + foo / bar.m