【matlab】函数参数不定数目及解析

因为想实现在一个.m文件中写多个类似功能的函数,查询后发现还是需要一个主函数,所以干脆把第一个函数设定为主函数,正好其他几个类似功能的函数写到下面,方便被主函数调用。遂主函数采用不定参数的形式,通过解析参数来定最后调用什么函数,整体代码如下

 1 function [ output_args ] = draw( varargin )
 2      % 定义Paser
 3    ip = inputParser;
 4    %添加可接收的参数
 5     ip.addParameter(\'o_mbr\',1);
 6     ip.addParameter(\'d_mbr\',1);
 7     ip.addParameter(\'o_region\',1);
 8     ip.addParameter(\'d_region\',1);
 9     
10     ip.parse(varargin{:});
11     result = ip.Results;
12     if  size(result.o_mbr,1)~=1  & size(result.d_mbr,1)~=1
13         draw_drct_zone( result.o_mbr,result.d_mbr );
14         hold on;
15     elseif size(result.o_region,1)~=1  & size(result.d_region,1)~=1
16         draw_region( result.o_region,result.d_region );
17          hold on;
18     end
19     
20  end

首先是主函数,draw是一个绘图函数,希望通过传入的参数来决定要怎样画,调用什么函数来画。

1 function [ output_args ] = draw( varargin ) %绘图函数

然后定义本函数可接受的所有参数,因为参数必须要设定默认值,但我预定的参数并不一定全部用上,因此在此处简单设定为1,而实际这些参数的值是多元数组,通过判断参数值的size来看它是否被真正的赋值了。

1     ip = inputParser;
2    %添加可接收的参数
3     ip.addParameter(\'o_mbr\',1);
4     ip.addParameter(\'d_mbr\',1);
5     ip.addParameter(\'o_region\',1);
6     ip.addParameter(\'d_region\',1);

此处定义了4个参数,前两个参数如果被赋值,则调用函数1,后两个参数如果被赋值则调用函数2。采用size判断是否被赋值,其实就是傻瓜逻辑,为了省事。

if  size(result.o_mbr,1)~=1  & size(result.d_mbr,1)~=1
         draw_drct_zone( result.o_mbr,result.d_mbr );
         hold on;
     elseif size(result.o_region,1)~=1  & size(result.d_region,1)~=1
         draw_region( result.o_region,result.d_region );
          hold on;
     end

特别注意的是,这一套流程概括为,建立parser→添加parser可解析参数→解析parser→读取parser解析结果→进行操作,除了最后一个,缺一不可

 1   function [ output_args ] = draw( varargin )
 2      % 定义Paser
 3      ip = inputParser;
 4    %添加可接收的参数
 5         ip.addParameter(\'o_mbr\',1);
 6      %parser解析
 7        ip.parse(varargin{:});
 8      %parser结果读取
 9        result = ip.Results;
10      %对结果中数据操作
11        if  size(result.o_mbr,1)~=1  & size(result.d_mbr,1)~=1
12           draw_drct_zone( result.o_mbr,result.d_mbr );
13        end     
14   end