因为想实现在一个.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
请发表评论