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
……
……
展开
 我来答
tianxiawulang
推荐于2017-10-21 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2669万
展开全部
从名字看,这段代码是一个弹出式菜单的回调函数。
第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进行分支判断是最安全的方式。当然,使用上面代码中的方法也有优势,那就是,按照这种实现方式,菜单项的顺序可以随便调整而不需要修改回调函数。
career5
2017-10-21 · TA获得超过913个赞
知道小有建树答主
回答量:967
采纳率:75%
帮助的人:303万
展开全部
get函数为获得图形对象的特性;
val=get(hObject,'Value');将对象hObject的Value属性值读出来,赋值给变量val
str=get(hObject,'String');将对象hObject的String属性值读出来,赋值给变量str
主要看看hObject为什么对象。
switch 为条件转移指令。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式