主要内容

包创建名称空间

包文件夹

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

请注意

在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

相关的话题

Baidu
map