このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
名前空間の作成
名前空間は、クラス フォルダー、クラス定義ファイル、関数ファイル、およびその他の名前空間 ("内部名前空間" と呼ばれる) を含めることができる特別なフォルダーです。名前空間を使用すると、コードを整理し、コード内に含まれる項目に対してより堅牢な名前を作成するのに役立ちます。関数名とクラス名は、特定の名前空間内で一意である必要があります。関数とクラスはその名前空間にスコープ設定されているため、別の名前空間でそれらの名前を再利用できます。
名前空間フォルダー
フォルダー名の先頭に +
文字を追加して名前空間を定義します。たとえば、名前空間フォルダー +mynamesp
には、クラス、列挙クラス、関数、内部名前空間、および内部名前空間内のクラス フォルダー内の 2 つ目のクラスが含まれています。
+mynamesp +mynamesp/MyClass.m +mynamesp/WeekdaysEnum.m +mynamesp/myFunction.m +mynamesp/+innernamesp/@MySecondClass/MySecondClass.m
メモ
このフォルダー階層は、あくまで例として示したものです。これは MATLAB® インストールには含まれていません。機能を試すには、これらのフォルダーとコードを独自のパスで定義してください。
MATLAB からアクセスできるようにするには、名前空間フォルダーの親フォルダーがパス上にある必要があります。名前空間フォルダー自体をパスに追加しようとすると、エラーが発生します。詳細については、名前空間と MATLAB パスを参照してください。
名前空間内のコードの定義
他のコードと同様に、名前空間のメンバーを定義します。定義に名前空間名を含めないでください。たとえば、名前空間フォルダーに示されているサンプル階層では、myFunction
の定義には関数名のみが含まれます。
function z = myFunction(x) ... end
同様に、MyClass
の定義にはクラス名のみが含まれます。
classdef MyClass ... end
名前空間メンバーの参照
ほとんどの名前空間メンバーを参照するには、メンバー名の先頭に名前空間名とドットを追加します。たとえば、このステートメントは、mynamesp
に含まれる MyClass
のインスタンスを作成します。(名前空間フォルダーに示されているサンプル階層を参照してください。)
obj = mynamesp.MyClass(arg1,arg2);
名前空間で定義されたコードの呼び出しでは、呼び出しが名前空間自体の内部にある場合でも、名前空間名を含める必要があります。たとえば、myFunction
が MyClass
によってプロパティ検証関数として使用される場合、関数名に名前空間を含める必要があります。
classdef MyClass properties myProp {mynamesp.myFunction} end end
名前空間コードへの外部アクセスを簡素化するために、名前空間からコードをインポートできます。インポートされたコードを呼び出す場合、名前空間名は必要ありません。詳細については、関数への名前空間メンバーのインポートを参照してください。
クラス フォルダー
クラスがクラス フォルダー (@ フォルダー) で定義されている場合、クラス フォルダー名は名前空間名の一部ではありません。たとえば、MySecondClass
のオブジェクトを構築する場合は、次の構文を使用します。
obj = mynamesp.innernamesp.MySecondClass(arg1,arg2);
メソッド
クラスの非静的メソッドを呼び出す場合、そのクラスのオブジェクトが存在し、既に名前空間にスコープ設定されているため、名前空間名は必要ありません。MyClass
のインスタンスである obj
の myMethod
メソッドを呼び出す場合、通常の構文に従います。
obj.myMethod(arg) myMethod(obj,arg)
静的メソッドには常に完全なクラス名と名前空間が必要です。
mynamesp.myClass.stMethod(arg)
プロパティ
インスタンスのパブリック プロパティには、非静的メソッドと同様に、完全な名前空間を使用せずにアクセスできます。ただし、クラスの特定のインスタンスを使用せずにそのクラスの定数プロパティにアクセスするには、完全な名前空間が必要です。たとえば、MyClass
で定数プロパティ ConstProp
が定義されている場合、その定数プロパティには、完全な名前空間を使用してアクセスします。
x = mynamesp.MyClass.ConstProp;
MyClass
のインスタンスが既に存在する場合は、完全な名前空間を使用せずに ConstProp
にアクセスできます。
y = mynamesp.MyClass; c = y.ConstProp;
列挙
名前空間内の列挙メンバーを参照するには、完全な名前空間名を使用します。たとえば、以下は mynamesp
内の WeekdaysEnum
の可能な定義です。
classdef WeekdaysEnum enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
完全な名前空間を使用して、列挙メンバー Monday
を変数に代入します。
day = mynamesp.WeekdaysEnum.Monday;
名前空間と MATLAB パス
名前空間内のコードを呼び出すには、最上位の名前空間の親フォルダーを MATLAB パスに追加する必要があります。親フォルダーが MATLAB パス上にない場合は、名前空間フォルダーが現在のフォルダーであっても、名前空間メンバーにアクセスできません。
MATLAB による重複した名前の処理方法
同じ名前をもつ名前空間
名前空間フォルダーが、パス上の後続位置にある、同じ名前をもつ他の名前空間フォルダーより優先されることはありません。2 つ以上の最上位の名前空間の名前が同じである場合、MATLAB はそれらを 1 つの名前空間として扱います。異なるパス フォルダー内の、同じ名前をもつ 2 つの名前空間で同じ関数名が定義されている場合、MATLAB はこれらの関数のうち 1 つだけを検出します。
名前空間関数と静的メソッド
名前空間関数と静的メソッドの名前が同じ場合、名前空間関数が静的メソッドよりも優先されます。たとえば、パス フォルダー fldrA
に名前空間関数 bar
が含まれていて、パス フォルダー fldrB
にクラス foo
の静的メソッド bar
が含まれているとします。
fldrA/+foo/bar.m % bar is a function in namespace foo fldrB/@foo/bar.m % bar is a static method of class foo
which
コマンドを使用して、名前空間関数が優先されることを示します。
which foo.bar
fldrA\+foo\bar.m
internal
名前空間
MathWorks® は、internal
という名前の名前空間の使用を予約しています。internal
という名前の名前空間に含まれているコードは MathWorks 専用であり、このコードの使用は推奨されません。このコードは、リリースごとに一貫して動作することが保証されません。該当する関数およびクラスは、予告なしに今後のリリースで MATLAB ソフトウェアから削除される可能性があります。