matlab问题:解释下面三行代码(1,2,3标出的)
functionpopupmenu1_Callback(hObject,eventdata,handles)val=get(hObject,'Value');……1str...
function popupmenu1_Callback(hObject, eventdata, handles)
val=get(hObject,'Value');……1
str=get(hObject,'String');……2
switch str{val} ……3
……
…… 展开
val=get(hObject,'Value');……1
str=get(hObject,'String');……2
switch str{val} ……3
……
…… 展开
展开全部
从名字看,这段代码是一个弹出式菜单的回调函数。
第1句:获取弹出式菜单的当前值,是一个从1开始的整数,表示用户选择了菜单的第几项;
第2句:获取弹出式菜单的字符串,也就是菜单上显示的文字内容(注意是所有菜单项的文字,而不仅仅是当前选定项);
第3句:根据当前选定菜单项的文字来决定执行不同的分支。
对代码的解释就上面这些,但应该说明的是,上面的做法存在一些隐患:
1、弹出式菜单的String属性不一定是cell string,也可能是string matrix(或者使用“|”分隔的字符串,创建时会被转换为string matrix),例如:
h=uicontrol('style','popup','str','1|2');
s=get(h,'str')
可以看到,结果并不是一个cell。
2、有些环境下(和操作系统以及MATLAB版本有关),如果字符串中包含双字节字符(如中文),分支判断可能会失败。这是因为,一个汉字可以是用一个16位长度的数来表示,也可能用两个8位长度的数表示,例如,你可以试试:
char(47802)
char([186 186])
在命令窗口里都会显示为一个“汉”字,但显然,47802不等于[186 186]。
所以,对于弹出式菜单,直接使用获取的val进行分支判断是最安全的方式。当然,使用上面代码中的方法也有优势,那就是,按照这种实现方式,菜单项的顺序可以随便调整而不需要修改回调函数。
第1句:获取弹出式菜单的当前值,是一个从1开始的整数,表示用户选择了菜单的第几项;
第2句:获取弹出式菜单的字符串,也就是菜单上显示的文字内容(注意是所有菜单项的文字,而不仅仅是当前选定项);
第3句:根据当前选定菜单项的文字来决定执行不同的分支。
对代码的解释就上面这些,但应该说明的是,上面的做法存在一些隐患:
1、弹出式菜单的String属性不一定是cell string,也可能是string matrix(或者使用“|”分隔的字符串,创建时会被转换为string matrix),例如:
h=uicontrol('style','popup','str','1|2');
s=get(h,'str')
可以看到,结果并不是一个cell。
2、有些环境下(和操作系统以及MATLAB版本有关),如果字符串中包含双字节字符(如中文),分支判断可能会失败。这是因为,一个汉字可以是用一个16位长度的数来表示,也可能用两个8位长度的数表示,例如,你可以试试:
char(47802)
char([186 186])
在命令窗口里都会显示为一个“汉”字,但显然,47802不等于[186 186]。
所以,对于弹出式菜单,直接使用获取的val进行分支判断是最安全的方式。当然,使用上面代码中的方法也有优势,那就是,按照这种实现方式,菜单项的顺序可以随便调整而不需要修改回调函数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询