主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

パッケージによる名前空間の作成

パッケージフォルダー

パッケージは、クラス フォルダーや、関数ファイルとクラス定義ファイル、その他のパッケージを含むことができる特別なフォルダーです。クラスおよび関数の名前はパッケージ フォルダーのスコープをもちます。パッケージは、名前が一意でなければならない名前空間です。関数名とクラス名はパッケージ内に限り一意でなければなりません。パッケージを使用することにより、クラスと関数を整理する手段が提供されます。また、パッケージ化することで、クラスと関数の名前を他のパッケージで再使用できるようにもなります。

メモ

パッケージは,MATLAB®7.6版本よりも前に作成されたクラス(つまり,classdefを使用しないクラス)ではサポートされません。

パッケージ フォルダーは常に+文字で始まります。次に例を示します。

+ mypack + mypack / pkfcn.m%包函数+ mypack / @myClass%类文件夹在包中

最上位のパッケージフォルダーの親フォルダーは,MATLABパス上になければなりません。

パッケージの内容の一覧表示

パッケージの内容を一覧表示するには、以下のように帮助コマンドを実行します。

帮助事件
事件的内容:EventData - event。事件数据的基础类。PROPERTYEVENT对象属性事件监听器事件的事件数据。LISTENER监听对象proplistener -事件。PROPLISTENER属性事件的侦听器对象

什么コマンドを使うこともできます。

什么事件
类目录Y:xxx\matlab\toolbox\matlab\lang\+event EventData PropertyEvent listener proplistener

内部パッケージ

MathWorks®では,MATLABの内部コードで使用されるユーティリティ関数用に内部という名前の付いたパッケージの使用権を留保しています。内部パッケージに属する関数はMathWorks専用のものです。内部パッケージに属する関数またはクラスの使用は推奨されません。新しいソフトウェアがリリースされると、前のリリースで使用していた関数やクラスが同じように動作しなくなる可能性があります。MATLABソフトウェアの今後のリリースでは、これらの関数やクラスが予告なく削除され、製品のリリース ノートにその旨が記載されない可能性があります。

パッケージのパッケージメンバーの参照

パッケージ内のパッケージ,関数,クラスに対するすべての参照は,パッケージをインポートしない場合には,パッケージの名前の接頭辞を使用する必要があります(クラスのインポートを参照)。たとえば,次のパッケージ関数を呼び出します。

+ mypack / pkfcn.m

次の構文を使用します。

z = mypack.pkfcn (x, y);

定義ではパッケージの接頭辞を使用しません。たとえば、関数pkfcn.mの関数定義行には,関数名のみが含まれます。

函数z = pkfcn (x, y)

クラス名だけでパッケージクラスを定義します。

classdefmyClass

ただし,これをパッケージの接頭辞で呼び出します。

obj = mypack.myClass (__arg1,最长,…);

ユーザーはクラスのオブジェクトをもっているので,クラスメソッドを呼び出すときにパッケージ名を必要としません。ドット表記または関数表記を使用できます。

obj.myMethod(arg)myMethod(obj,arg)

静的メソッドは,パッケージ名を含む完全クラス名を必要とします。

mypack.myClass.stMethod (arg)

パッケージ外からのパッケージ メンバーの参照

あるパッケージに含まれる関数,クラスおよびその他のパッケージは,そのパッケージをスコープとします。パッケージメンバーのいずれかを参照するには、メンバー名の前にパッケージ名を置き、その間をドットで区切ります。たとえば、次のステートメントは、mypackパッケージに含まれるMyClassのインスタンスを作成します。

obj = mypack.MyClass;

クラスメンバーへのアクセス——さまざまな方法

この節では,パッケージの外からさまざまなパッケージメンバーにアクセスする方法について説明します。以下の内容をもつパッケージmypackがあるとします。

+mypack+mypack/myFcn.m+mypack/@MyFirstClass+mypack/@MyFirstClass/myFcn.m+mypack/@MyFirstClass/otherFcn.m+mypack/@MySecondClass/mypack/@MySecondClass/MySecondClass.m+mypack/+mysubpack+myFcn.m

mypackの関数myFcnを呼び出します。

mypack.myFcn (arg)

mypackの各クラスのインスタンスを作成します。

其中obj1 = mypack.MyFirstClass;methoda = mypack.MySecondClass (arg);

パッケージmysubpackの関数myFcnを呼び出します。

mypack.mysubpack.myFcn (__arg1、最长);

mypack。MyFirstClassmyFcnと呼ばれるメソッドをもつ場合,オブジェクトを呼び出すメソッドと同様にして呼び出します。

obj = mypack.MyFirstClass;myFcn (obj, arg);

mypack。MyFirstClassMyPropと呼ばれるプロパティをもつ場合,ドット表記とオブジェクトを使用して割り当てます。

obj = mypack.MyFirstClass;obj。MyProp = x;

パッケージとMATLABパス

MATLABパスにパッケージフォルダーを追加することはできません。ただし,パッケージの親フォルダーをMATLABパスに追加しなければなりません。MATLABパス上にパッケージの親フォルダーがない場合、パッケージ フォルダーが現在のフォルダーである場合でもパッケージのメンバーにアクセスできません。パッケージの親フォルダーをパスに追加するには、パッケージ フォルダーを現在のフォルダーにするだけでは不十分です。

パッケージのメンバーのスコープはパッケージ内のままです。常にパッケージ名を使用してパッケージのメンバーを参照する必要があります。あるいは,パッケージメンバーを呼び出すことができる関数にパッケージをインポートします。クラスのインポートを参照してください。

パッケージフォルダーはクラスとは異なり,パス上で後方に位置する他のパッケージフォルダーを隠すことはありません。2つ以上のパッケージが同じ名前である場合,MATLABはそれらすべてを1つのパッケージとして扱います。異なるパスフォルダーにある,名前の重複するパッケージで同じ関数名が定義されている場合,MATLABはそのうちの1つの関数しか検出しません。

重複する名前の解決

パッケージとクラスが同じ名前をもつと仮定します。次に例を示します。

fldr_1 / + foo fldr_2 / @foo / foo.m

这fooへの呼び出しでは,実行可能なクラスコンストラクターへのパスが返されます。

>>哪个foo fldr_2/@foo/foo.m

関数とパッケージは,同じ名前をもつことができます。ただし,パッケージ名は,それだけでは識別子になりません。そのため,重複する名前だけがある場合,関数を識別します。パッケージの名前のみを実行すると,エラーになります。

パッケージ関数と静的メソッド

パッケージとクラスが同じ名前をもつ場合,パッケージ関数は,静的メソッドに優先します。たとえば,パスフォルダーfldrAにパッケージ関数が含まれ,パスフォルダーfldrBにクラスの静的メソッドが含まれているとします。

fldrA / + foo / bar.m% bar是包foo中的一个函数fldrB / @foo / bar.m% bar是类foo的一个静态方法

这foo.barの呼び出しは,パッケージ関数のパスを返します。

哪一个美食酒吧
fldrA \ + foo \酒吧。包函数

同じパスフォルダーに,同じ名前のパッケージとクラスフォルダーが含まれている場合は,パッケージ関数が静的メソッドに優先します。

fldr / @foo / bar.m% bar是类foo的一个静态方法fldr / + foo / bar.m% bar是包foo中的一个函数

这foo.barの呼び出しは,パッケージ関数のパスを返します。

哪一个美食酒吧
fldr / + foo / bar.m

パスフォルダーfldrに,静的メソッド酒吧を定義するclassdefファイル喷火が含まれ、同じフォルダーにパッケージ関数酒吧を含むパッケージ+ fooが含まれているとします。

fldr/foo.m% bar是类foo的一个静态方法fldr / + foo / bar.m% bar是包foo中的一个函数

这foo.barの呼び出しは,パッケージ関数のパスを返します。

哪一个美食酒吧
fldr / + foo / bar.m

関連するトピック