matlab中獨(dú)立回調(diào)函數(shù)是什么
matlab中獨(dú)立回調(diào)函數(shù)是什么
MATLAB(矩陣實(shí)驗(yàn)室)是MATrix LABoratory的縮寫(xiě),是一款由美國(guó)The MathWorks公司出品的商業(yè)數(shù)學(xué)軟件。MATLAB是一種用于算法開(kāi)發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)技術(shù)計(jì)算語(yǔ)言和交互式環(huán)境。除了矩陣運(yùn)算、繪制函數(shù)/數(shù)據(jù)圖像等常用功能外,MATLAB還可以用來(lái)創(chuàng)建用戶界面及與調(diào)用其它語(yǔ)言(包括C,C++和FORTRAN)編寫(xiě)的程序。
獨(dú)立的回調(diào)函數(shù)
建立GUI函數(shù)的一個(gè)有效方法是編寫(xiě)?yīng)毩⒌幕卣{(diào)函數(shù),專門(mén)執(zhí)行一個(gè)或多個(gè)回調(diào)。函數(shù)使用的對(duì)象句柄和其它變量可以作為參量傳遞,必要時(shí)回調(diào)函數(shù)可返回值。
考慮先前的一個(gè)例子,建立一個(gè)方位角的滑標(biāo),以腳本文件來(lái)實(shí)現(xiàn)。
% setview.m script file
vw=get(gca, ' View ' );
Hc_az=uicontrol(gcf, ' Style ' , ' slider ' ,... ' Position ' ,[10 5 140 20],...
' Min ' ,-90, ' Max ' ,90, ' Value ' ,vw(1),... ' Callback ' ,[...
' set(Hc_cur, ' String ' ,num2str(get(Hc_az, ' Value ' ))), ' ... ' set(gca, ' View ' ,[get(Hc_az, ' Value ' ) vw(2)]) ' ]); Hc_min=uicontrol(gcf, ' style ' , ' text ' ,... ' Position ' ,[10 25 40 20],...
' String ' ,num2str(get(Hc_az, ' Min ' )));
Hc_max=uicontrol(gcf, ' Style ' , ' text ' ,... ' Position ' ,[110 25 40 20],...
' String ' ,num2str(get(Hc_az, ' Max ' )));
Hc_cur=uicontrol(gcf, ' Style ' , ' text ' ,... ' Position ' ,[60 25 40 20],...
' String ' ,num2str(get(Hc_az, ' Value ' )));
下面是同樣的例子。作為一個(gè)函數(shù),采用 ' Tag ' 屬性來(lái)辨別控制框,并使用獨(dú)立的M文件來(lái)執(zhí)行回調(diào)。
funtion setview( )
vw=get(gca, ' View ' );
Hc_az=uicontrol(gcf, ' Style ' , ' Slider ' ,... ' Position ' ,[10 5 140 20],...
' Min ' ,-90, ' Max ' ,90, ' Value ' ,vw(1),... ' Tag ' , ' Azslider ' ,... ' Callback ' , ' svcback ' );
Hc_min=uicontrol(gcf, ' style ' , ' text,... ' Position ' ,[10 25 40 20],...
' String ' ,num2str(get(Hc_az, ' Min ' )));
Hc_max=uicontrol(gcf, ' Style ' , ' text ' ,... ' Position ' ,[110 25 40 20],...
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
' String ' ,num2str(get(Hc_az, ' Max ' )));
Hc_cur=uicontrol(gcf, ' Style ' , ' text ' ,... ' Position ' ,[60 25 40 20],... ' Tag ' , ' Azcur ' ,...
' String ' ,num2str(get(Hc_az, ' Value ' )));
回調(diào)函數(shù)本身如下:
function svcback( )
vw = get(gca, ' View ' );
Hc_az = findobj(gcf, ' Tag ' , ' AZslider ' ); Hc_cur = findobj(gcf, ' Tag ' , ' AZcur ' );
str = num2str(get(Hc_az, ' Value ' )); newview =[get(Hc_az, ' Value ' ) vw(2)]; set(Hc_cur, ' String ' ,str) set(gca, ' View ' ,newview)
上面的例子并不節(jié)省很多代碼,但卻得到了用函數(shù)而不用腳本文件的優(yōu)點(diǎn):回調(diào)函數(shù)可以利用臨時(shí)變量,而不使命令窗口工作空間擁擠;不需要eval所需的引號(hào)和字符串;在回調(diào)函數(shù)中命令的句法變得十分簡(jiǎn)單。使用獨(dú)立回調(diào)函數(shù)技術(shù),越復(fù)雜的回調(diào)(函數(shù))越簡(jiǎn)單。
獨(dú)立回調(diào)函數(shù)的缺點(diǎn)是:需要很大數(shù)目的M文件以實(shí)現(xiàn)一個(gè)含有若干控制框和菜單項(xiàng)的GUI函數(shù),所有這些M文件必須在MATLAB路徑中可得,且每一個(gè)文件又必須要有一個(gè)不同的文件名。在對(duì)文件名大小有限制且對(duì)大小寫(xiě)不敏感的平臺(tái)上,如MS-windows,文件沖突的機(jī)會(huì)就增加了。而且回調(diào)函數(shù)只能被GUI函數(shù)調(diào)用而不能被用戶調(diào)用。