主要内容

包创建命名空间

包文件夹

包是特殊的文件夹,可以包含类文件夹、函数和类定义文件以及其他包。类和函数的名称限定在包文件夹内。包是一个名称空间,其中的名称必须唯一。函数名和类名只能在包中唯一。使用包提供了一种组织类和函数的方法。包还允许在不同的包中重用类和函数的名称。

请注意

在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

相关的话题