Main Content

验证属性和输入值

此示例说明如何验证为 System object™ 提供的输入和属性值是否有效。

验证单个属性

要独立于其他属性来验证一个属性值,请使用 MATLAB 类属性验证。此示例说明如何指定一个逻辑属性、一个正整数属性和一个必须为三个值之一的字符串属性。

 properties
    UseIncrement (1,1) logical = false
    WrapValue (1,1) {mustBePositive, mustBeInteger} = 1
    Color (1,1) string {mustBeMember(Color, ["red","green","blue"])} = "red"
 end

验证相互依赖的属性

要验证两个或多个相互依赖的属性的值,请使用 validatePropertiesImpl。此示例说明如何编写 validatePropertiesImpl 以验证逻辑属性 (UseIncrement) 为 true 并且 WrapValue 的值大于 Increment

 methods (Access = protected)
    function validatePropertiesImpl(obj)
        if obj.UseIncrement && obj.WrapValue > obj.Increment
          error("Wrap value must be less than increment value");
        end
    end
 end

验证输入

要验证输入值,请使用 validateInputsImpl 方法。此示例说明如何验证第一个输入是否为数值。

methods (Access = protected)
   function validateInputsImpl(~,x)
      if ~isnumeric(x)
         error("Input must be numeric");
      end
   end
end        

完整的类示例

此示例是一个完整的 System object,它显示每种验证语法的示例。

classdef AddOne < matlab.System
% ADDONE Compute an output value by incrementing the input value
  
  % All properties occur inside a properties declaration.
  % These properties have public access (the default)
  properties
    UseIncrement (1,1) logical = false
    WrapValue (1,1) {mustBePositive, mustBeInteger} = 10
    Increment (1,1) {mustBePositive, mustBeInteger} = 1
  end

  methods (Access = protected)
    function validatePropertiesImpl(obj)
        if obj.UseIncrement && obj.WrapValue > obj.Increment
          error("Wrap value must be less than increment value");
        end
    end
    
    % Validate the inputs to the object
    function validateInputsImpl(~,x)
        if ~isnumeric(x)
          error("Input must be numeric");
        end
    end
        
    function out = stepImpl(obj,in)
      if obj.UseIncrement
        out = in + obj.Increment;
      else
        out = in + 1;
      end
    end    
  end
end

另请参阅

|

相关主题