需求
設計一個 y = kx + b 的函數,輸入 k, x, b,返回 y ; 其中,k 默認取 1 (未被賦值時),x 和 b 取任意值。
實現
function out = my_test(x,b,varargin)
p = inputParser; % 函數的輸入解析器
addParameter(p,'k',1); % 設置變量名和默認參數
parse(p,varargin{:}); % 對輸入變量進行解析,如果檢測到前面的變量被賦值,則更新變量取值
out = p.Results.k*x + b; % 在這里定義你自己的函數計算公式
end
測試:
>> my_test(3,5)
ans =
8
>> my_test(3,5,'k',2)
ans =
11
總結
- 首先,使用 varargin (var-arg-in,輸入變量列表)用來接收任意個數的輸入變量。
- 然后,構造 inputParser 輸入解析器,通過 addParameter 向其中定義變量和默認取值。
- 再通過 parse 對輸入變量列表 varargin 進行解析,當檢測到前面定義的變量在 varargin 中被重新賦值時,則更新該變量。
- 最后,按照 p.Results.k 這樣的形式,對變量進行引用,參與到自己定義的計算中,剩下的就跟普通函數的做法無異了。
- 調用函數時,若想重新為默認變量賦值,則按照 'k',2 (即Name1,Value1,...,NameN,ValueN這種字符串和數值組合形式)賦值即可。其實 Matlab 里的很多函數都采用到了這種形式,回憶下是不是這樣?比如 plot 的曲線顏色、粗細等參數的設置。
- 值得一提的是,這種字符串和數值的輸入變量賦值方式,可以不講究順序,所以非常方便!