2016-01-20 81 views
0

Matlab中的inputParser類對於在調用某個函數時綜合檢查用戶傳遞的參數非常有用。例如:使用`inputParser`驗證默認參數

function [] = TestValidation(varargin) 
%[ 
    p = inputParser(); 
    p.addParameter('Toto', 'Hello', @isnumeric); 

    p.parse(varargin{:}); 
%] 
end 

將引發一個錯誤,如果用戶試圖給非數字值分配給參數Toto(例如TestValidation('Toto', 'Hello') ==>引發錯誤因爲Hello不是一個數字)。

無論如何調用上述沒有參數的函數(即TestValidation()),即使Toto的默認值是字符串(即Hello),也不會產生錯誤。

有一個簡單的辦法,迫使inputParser驗證爲默認值還是可以隻手工做事後

+0

你會指定一個默認值,它不會通過你的驗證功能似乎對我來說很直觀。您希望函數在用戶沒有爲參數指定值時引發錯誤?你也可以在驗證中使用〜isempty。我想了解你想從中得到什麼樣的行爲。 –

+0

我想測試這個參數是默認的還是用戶提供的。下面的@Daniel回答正是我需要的。 – CitizenInsane

回答

2

這是一個類,創建一個實現你想要的功能的子類:

classdef myInputParser<inputParser 
    methods 
     function addParamValue(obj,name,default,fcn,varargin) 
      assert(fcn(default)); 
      [email protected](obj,name,default,fcn,varargin{:}); 
     end 
    end 
end 

>> p = myInputParser(); 
>> p.addParamValue('Toto', 'Hello', @isnumeric); 
Error using myInputParser/addParamValue 
(line 4) 
Assertion failed.