如何通过回调函数传递varargin

Car*_*oft 0 matlab callback variadic-functions cell-array matlab-gui

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

function topfunc(varargin)
%code
do_something(varargin{:})
Run Code Online (Sandbox Code Playgroud)

该函数dosomething可以看到正确的参数列表.但是,当我通过callback定义传递varargins时,就像在

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

然后该函数 doslide调用绘图更新功能dordplot

 function doslide(theui,event,fileName,mode, goodframes,varargin)
% code snipped...

dordplot(slidinfo,event,fileName,mode,goodframes,varargin{:});
end
Run Code Online (Sandbox Code Playgroud)

里面doslide,varargin是含有期望的1×2单元1x1的细胞.

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

varargin = varargin{:};
Run Code Online (Sandbox Code Playgroud)

但是,varargin首先将它包裹在一个细胞内似乎是错误的.
有没有修复,或者我是否错误地定义了我的回调函数调用?

exc*_*aza 5

根据以下文档varargin:

当函数执行时,varargin是一个1-by-N单元数组,其中N 是在显式声明的输入之后函数接收的输入数.

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

{@doslide,adcname,mode,goodframes,{varargin{:}}}
Run Code Online (Sandbox Code Playgroud)

varargin{:}大括号括起来将其连接回单元格数组,因此您只需将1个输入传递给doslide后面goodframes.

删除大括号:

{@doslide, adcname, mode, goodframes, varargin{:}} 
Run Code Online (Sandbox Code Playgroud)