このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
MATLAB®はプロパティ検証で使用する関数を定義します。これらの関数は,検証のための一般的な使用パターンをサポートし,説明的なエラーメッセージを提供します。以下の表で,MATLAB検証関数を分類し,その使用方法を説明しています。
名前 |
意味 |
入力で呼び出される関数 |
---|---|---|
|
||
|
||
|
||
|
||
|
|
|
|
|
|
|
||
|
||
|
|
|
|
||
|
名前 |
意味 |
入力で呼び出される関数 |
---|---|---|
|
|
クラス定義の関係を使用 |
|
||
|
||
|
|
|
|
|
名前 |
意味 |
入力で呼び出される関数 |
---|---|---|
|
||
|
价值 はスカラーまたは空でなければならない。 |
|
|
价值 はベクトルでなければならない。 |
名前 |
意味 |
入力で呼び出される関数 |
---|---|---|
|
|
|
|
价值 は範囲内になければならない。 |
名前 |
意味 |
入力で呼び出される関数 |
---|---|---|
|
|
|
|
路径 はフォルダーを参照しなければならない。 |
|
|
該当なし |
|
|
|
該当なし |
|
該当なし | |
|
varname は有効な変数名でなければならない。 |
クラス定義でプロパティの検証関数を使用して,プロパティ値に特定の制限を課します。関数によって課される特定の要件をプロパティ値が満たさない場合、検証関数は潜在的なプロパティ値を引数として受け入れ、エラーを発行します。
検証プロセス中,MATLABはクラス定義にリストされている各検証関数に値を渡します。MATLABは各関数を左から右の順序で呼び出し、最初に見つかったエラーをスローします。検証関数に渡される値は、クラスとサイズの指定によって適用された変換の結果です。クラスとサイズの検証の詳細については、プロパティのクラスとサイズの検証を参照してください。
MATLAB検証関数の一覧については,MATLAB検証関数を参照してください。
検証関数を,関数名または引数のある関数呼び出しのコンマ区切りリストとして,中かっこで囲んで指定します。
classdefMyClass属性道具{fcn1, fcn2,...} = defaultValue结束结束
MATLABは潜在的なプロパティ値を暗黙的に検証関数に渡します。ただし,検証関数が潜在的なプロパティ値に加えて入力引数も必要とする場合,プロパティと追加引数の両方を含めなければなりません。追加引数はリテラル値でなければならず,変数を参照できません。リテラル値は数字やテキストなどの非シンボリック表現です。
たとえば,関数mustBeGreaterThan
について考えます。入力パラメーターとして下限値が必要です。この検証関数では,プロパティ値がこの下限値より大きくなければなりません。
プロパティを最初の引数として渡します。プロパティ名を使用しますが、引用符で囲まないでください。このプロパティ定義は、道具
を10
より大きい値に制限します。
属性道具{mustBeGreaterThan(道具,10)}结束
以下のクラスで各プロパティの検証関数を指定します。
数据
は数値で有限でなければならない。
插值函数
はリストされている3つのオプションのいずれかでなければならない。このプロパティの既定値を指定してこの要件を満たします。
classdefValidatorFunction属性数据{mustBeNumeric, mustBeFinite}插值函数{mustBeMember(插值函数,{“线性”、“立方”、“花键”})}=“线性”结束结束
クラスの既定オブジェクトを作成すると初期値が表示されます。
一个= ValidatorFunction
a = ValidatorFunction with properties: Data: [] Interp: 'linear'
プロパティに値を代入すると検証関数が呼び出されます。
a.Data =“立方”
设置类“ValidatorFunction”的属性“Data”时出错:值必须为数字。
数据
プロパティ検証には数値クラスが含まれないため,字符
ベクトルの数値への変換はありません。数据
プロパティの検証を変更してクラスを双
として指定する場合,MATLABは字符
ベクトルを双
配列に変換します。
属性数据双{mustBeNumeric, mustBeFinite}结束
MATLABが字符
ベクトルをクラス双
に変換するため,字符
ベクトルへの代入を行ってもエラーは生成されません。
a.Data =“立方”
Data: [99 117 98 105 99] Interp: 'linear'
插值函数
プロパティへの代入では完全一致が必要です。
一个= ValidatorFunction;a.Interp =“铜”
设置类ValidatorFunction的“Interp”属性时出错:Value必须是这个线性三次样条集合的成员
列挙クラスを使用すると,大文字小文字を区別しないあいまい一致を利用できます。
列挙クラスを使用するプロパティ検証には,次の利点があります。
明確なcharベクトルまたは字符串スカラーに対する,大文字小文字を区別しないあいまい一致
あいまい一致から正確な値への変換
たとえば,插值函数
プロパティの検証用にInterpMethod
列挙クラスを定義するとします。
classdefInterpMethod枚举线性立方样条结束结束
InterpMethod
クラスを使用するために插值函数
プロパティの検証を変更します。
classdefValidatorFunction属性数据{mustBeNumeric, mustBeFinite}插值函数InterpMethod结束结束
“立方”
の最初の数文字に一致する値を代入します。
一个= ValidatorFunction;a.Interp =“铜”
a = ValidatorFunction with properties
検証関数は,プロパティ値と関数の引数値を検証するという特定の目的のために設計された通常のMATLAB関数です。プロパティの検証に使用される関数は,次を行います。
潜在的なプロパティ値を入力引数として受け入れる
値を返さない
検証に失敗した場合はエラーをスローする
MATLAB検証関数を使用して実行できない特定の検証を行う場合,独自の検証関数を作成すると便利です。ローカル関数をクラスファイル内に作成したり,任意のクラスで使用できるように関数をMATLABパス上に配置することができます。
たとえば,ImgData
クラスはローカル関数を使用して,サブクラスを除く数据
プロパティをuint8
またはuint16
の値のみに制限し,他の数値クラスからの変換を許可しない検証関数を定義します。事前定義された検証関数mustBeInRange
は,使用可能な値の範囲を制限します。
classdefImgData属性数据{mustBeImData(数据),mustBeInRange(0255年数据)}= uint8 (0)结束结束函数mustBeImData (a)%检查特定的类如果~ (strcmp (cname,“uint8”) | | strcmp (cname,“uint16”)) eidType =“ImData: notUint8OrUint16”;msgType ='赋值给Data属性不是uint8或uint16 Data ';throwAsCaller (MException (eidType, msgType))结束结束
ImgData
クラスのインスタンスを作成するときに,MATLABは既定値が255年0…
の範囲にあり,空でないuint8
またはuint16
の値であることを検証します。この既定値は,プロパティに代入する他の値と同様に,検証の要件を満たさなければならない点に注意してください。
一个= ImgData
a = ImgData属性:Data: 0
プロパティへの代入を行うと,検証関数が左から右の順序で呼び出されます。字符
ベクトルを数据
プロパティに代入すると,mustBeImData
によってエラーがスローされます。
a.Data =“红色”;
设置类“ImgData”的属性“Data”错误。分配给Data属性的值不是uint8或uint16 Data。
範囲外の数値を代入すると,mustBeInRange
によってエラーがスローされます。
a.Data = uint16 (312);
设置类“ImgData”的属性“Data”错误。值必须大于或等于0,小于或等于255。
関連する関数については,mustBeInteger
、mustBeNumeric
およびmustBePositive
を参照してください。
依存関数をクラスのメソッドとして実装することにより,クラスのオブジェクトでMATLAB検証関数がサポートされるようにします。各関数に実装するメソッドを決定するには,このMATLAB検証関数の表にリストされている検証関数のリファレンスページを参照してください。
たとえば,クラスでmustBeGreaterThan
検証関数がサポートされるようにするとします。以下のMATLAB関数をクラスでメソッドとしてオーバーロードします。
伊斯雷尔
- - - - - -mustBeGreaterThan
は複素数をサポートしないため,常に論理値真正的
を返します。
gt
- - - - - -mustBeGreaterThan
の要件として,比較の2番目のオブジェクトはスカラーでなければなりません。
金宝appSupportmBGT
クラスがmustBeGreaterThan
のサポートを実装します。
classdef金宝appSupportmBGT属性道具(1,1)双{mustBeReal}结束方法函数obj = 金宝appSupportmBGT(数据)如果Nargin > 0 obj。支持=数据;结束结束函数Tf = isreal(obj) Tf = true;结束函数Tf = gt(obj1, obj2)道具)> obj2.Prop;结束结束结束
このクラスのオブジェクトに対してmustBeGreaterThan
を使用します。
一个= 金宝appSupportmBGT (10);b = 金宝appSupportmBGT (12);mustBeGreaterThan (a, b)
使用mustBeGreaterThan(第19行)值时出错,值必须大于比较值。