如何通过回调函数传递varargin



我正在为一个图形窗口编写代码,该窗口包含几个运行回调函数的GUI项。目前,我有一个文本框和一个滑块控件,我进行了设置,这样对文本框值的更改不仅会更改显示的数据,还会更新滑块位置以匹配该值。我遇到的问题是试图阻止我的varargin参数(在创建图形窗口时输入到主函数(被包含在父cell变量中。当我的顶级varargin包含值参数对时,varargin是维度为1x2的cell。没关系。通常,可以将所有这些参数传递给内部函数调用,如下所示:

function topfunc(varargin)
%code
do_something(varargin{:})

函数dosomething可以看到正确的参数列表。但当我通过callback定义时,就像中一样

txtui = uicontrol(hf,'Style','edit','string',fristframe,'backgroundcolor','y',...
    'position',[10 100 50 20],'Tag','Scaler','UserData',lsatframe,...
    'Callback',{@doslide,adcname,mode,goodframes,{varargin{:}} } ); 

然后函数CCD_ 8调用绘图更新函数dordplot

 function doslide(theui,event,fileName,mode, goodframes,varargin)
% code snipped...
dordplot(slidinfo,event,fileName,mode,goodframes,varargin{:});
end

doslide内部,varargin是包含期望的1x2小区的1x1小区。

我在最后一个函数中添加了一个修补程序,其中实际使用了varargin的内容,行

varargin = varargin{:};

varargin最初被包裹在细胞内似乎是错误的
是否有修复,或者我是否错误地定义了回调函数调用?

根据varargin的文档:

当函数执行时,varargin1-by-N单元阵列,其中N是函数在显式声明的输入。

在您的回调声明中,您有:

{@doslide,adcname,mode,goodframes,{varargin{:}}}

用大括号封装varargin{:}会将其连接回一个单元格数组,因此在goodframes之后只向doslide传递1个输入。

拆除支架:

{@doslide, adcname, mode, goodframes, varargin{:}} 

在matlab中,单元格数组具有多索引单元格索引(c{:}c{array}(的表达式是值列表。值列表只是一个逗号分隔的单元格数组元素列表。例如,对于单元阵列c={1,2,3,4}CCD_ 24的值例如为CCD_。所以d= c{:}线的意思是d=1,2,3,4。这是一个错误。

UPD:我说得不对,d=1,2,3,4不是错误,它是表达d=1的一种方式。无论如何,{varargin{:}}等价于varargin,因为varargin{:}表示varargin 的所有元素的逗号分隔列表

相关内容

  • 没有找到相关文章

最新更新