主要内容

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

プロパティの検証関数

MATLAB検証関数

MATLAB®はプロパティ検証で使用する関数を定義します。これらの関数は,検証のための一般的な使用パターンをサポートし,説明的なエラーメッセージを提供します。以下の表で,MATLAB検証関数を分類し,その使用方法を説明しています。

数値属性

名前

意味

入力で呼び出される関数

mustBePositive(值)

值> 0

gt伊斯雷尔isnumericislogical

mustBeNonpositive(值)

值< = 0

通用电气伊斯雷尔isnumericislogical

mustBeNonnegative(值)

值> = 0

通用电气伊斯雷尔isnumericislogical

mustBeNegative(值)

值< 0

lt伊斯雷尔isnumericislogical

mustBeFinite(值)

价值には,要素も要素もない。

isfinite

mustBeNonNan(值)

价值には要素がない。

isnan

mustBeNonzero(值)

值~ = 0

情商isnumericislogical

mustBeNonsparse(值)

价值にはスパース要素がない。

issparse

mustBeReal(值)

价值には虚数部がない。

伊斯雷尔

mustBeInteger(值)

值= =地板(值)

伊斯雷尔isfinite地板上isnumericislogical

mustBeNonmissing(值)

价值は欠損値を含むことができない。

ismissing

他の値との比較

名前

意味

入力で呼び出される関数

mustBeGreaterThan(价值,c)

c值>

gtisscalar伊斯雷尔isnumericislogical

mustBeLessThan(价值,c)

值< c

lt伊斯雷尔isnumericislogical

mustBeGreaterThanOrEqual(价值,c)

值> = c

通用电气伊斯雷尔isnumericislogical

mustBeLessThanOrEqual(价值,c)

值< = c

伊斯雷尔isnumericislogical

データ型

名前

意味

入力で呼び出される関数

mustBeA(价值,类名)

价值は特定のクラスでなければならない。

クラス定義の関係を使用

mustBeNumeric(值)

价值は数値でなければならない。

isnumeric

mustBeNumericOrLogical(值)

价值は数値または逻辑でなければならない。

isnumericislogical

mustBeFloat(值)

价值は浮動小数点配列でなければならない。

isfloat

mustBeUnderlyingType(typename价值)

价值には,基となる型が指定されていなければならない。

isUnderlyingType

サイズ

名前

意味

入力で呼び出される関数

mustBeNonempty(值)

价值は空ではない。

isempty

mustBeScalarOrEmpty(值) 价值はスカラーまたは空でなければならない。

isscalarisempty

mustBeVector(值) 价值はベクトルでなければならない。

isvector

メンバーシップおよび範囲

名前

意味

入力で呼び出される関数

mustBeMember(价值)

价值年代のメンバーの完全一致である。

ismember

mustBeInRange(价值低,上部,boundflags) 价值は範囲内になければならない。

gt通用电气lt

テキスト

名前

意味

入力で呼び出される関数

mustBeFile(路径)

路径はファイルを参照しなければならない。

isfile

mustBeFolder(文件夹) 路径はフォルダーを参照しなければならない。

isfolder

mustBeNonzeroLengthText(值)

价值は非ゼロ長のひとまとまりのテキストでなければならない。

該当なし

mustBeText(值)

价值は字符串配列,文字ベクトル,または文字ベクトルの细胞配列でなければならない。

該当なし

mustBeTextScalar(值)

价值はひとまとまりのテキストでなければならない。

該当なし
mustBeValidVariableName(varname) varnameは有効な変数名でなければならない。

isvarname

関数を使用したプロパティの検証

クラス定義でプロパティの検証関数を使用して,プロパティ値に特定の制限を課します。関数によって課される特定の要件をプロパティ値が満たさない場合、検証関数は潜在的なプロパティ値を引数として受け入れ、エラーを発行します。

検証プロセス中,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。

関連する関数については,mustBeIntegermustBeNumericおよび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行)值时出错,值必须大于比较值。

関連するトピック