我目前正在为学校的matlab最终项目工作。在编程方面,我认为自己相当知识渊博且精通...但Matlab只是有很多奇怪的东西。
基本问题 (在找到答案后意识到这一点)!如何在调用gui句柄对象时使用变量 没有使用变量的名称而不是值?
换句话说: 在字段名称中使用变量(如果我知道这很简单,我就不会问)
我的项目正在构建一个古老的“战舰”游戏的简单演绎。
我的问题:我目前有5件船舶对象(轴)。它们一次被选中一个以移动到另一个位置(网格)。 我能够使用 setpixelposition 在按钮点击后移动每个对象。
现在点击按钮,我有类似的东西
function btnPlaceShip_Callback(hObject, eventdata, handles)
%Store the current selected ship(passed from an onclick to a label)
ship = get(handles.lblSelectedShip,'string');
%I have tried everything I could think of, but basically I want to achieve the
%following
setpixelposition(handles.ship, [0 250 50 250])
%where the variable 'ship' contains the name of the object.
换句话说, var 发货 ='shipAircraftCarrier'和..
setpixelposition(handles.shipAircraftCarrier, [0 250 50 250])
有效!(设置指定的特定船舶的位置)。但是,使用变量 ship ,matlab会逐字地获取字符串而不是其值。改为使用变量非常方便!
如果有人有任何解决方案,我将不胜感激。我在网上搜索过,但也许我缺少对Matlab GUI内容的一些基本理解 - matlab帮助文档是非描述性的并且没有多大帮助。
答案 0 :(得分:0)
您可以使用eval
函数执行此操作,但是您需要注意字符串注入:
setpixelposition(eval(strcat('handles.',ship)), [0 250 50 250])
答案 1 :(得分:0)
您可以使用dynamic fieldnames或getfield。使用标识符与字符串的字段索引在Matlab structs
和Javascript objects
中非常相似。
Matlab的:
fromId = handles.shipAircraftCarrier; %identifier
fromString = handles.('shipAircraftCarrier'); %string
使用Javascript:
var fromId = handles.shipAircraftCarrier; //identifier
var fromString = handles["shipAircraftCarrier"]; //string
答案 2 :(得分:0)
正如其他人所说,使用dynamic fieldnames。虽然没有测试它的代码,但我相信只需在 ship 周围放置括号就会将字符串替换为结构名称,因此
setpixelposition(handles.(ship), [0 250 50 250])
尽可能避免使用eval()。