MatlabGUI:使用变量引用现有对象句柄

MatlabGUI:使用变量引用现有对象句柄,matlab,matlab-guide,Matlab,Matlab Guide,我目前正在为学校做我的matlab期末项目。我认为自己在编程方面相当有学问和熟练。但是Matlab有太多的奇怪之处 基本问题在找到答案后意识到了这一点!如何在调用gui句柄对象时使用变量 没有使用变量的名称而不是值 换句话说:在字段名中使用一个变量,如果我知道它是这么简单的话,我是不会问的 我的项目是建立一个古老的“战舰”游戏的简单版本 我的问题:我目前有5个对象轴的船舶件。一次选择一个,将其移动到网格中的另一个位置。我能够使用setpixelposition在单击按钮后移动每个对象 现在在按钮

我目前正在为学校做我的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 ship=‘shipAircraftCarrier’和

    setpixelposition(handles.shipAircraftCarrier, [0 250 50 250]) 
工作!设置指定船舶的位置。但是,使用变量ship,matlab会按字面意思接受字符串,而不是它的值。使用该变量将非常方便

如果有人有任何解决办法,我将不胜感激。我浏览过web,但可能对Matlab GUI的内容缺少一些基本的了解-Matlab帮助文档非常缺乏描述性,没有太多帮助。

您可以使用eval函数来完成此操作,但需要注意字符串注入:

setpixelposition(eval(strcat('handles.',ship)), [0 250 50 250])  
您可以使用或。使用标识符和字符串的字段索引在Matlab结构和Javascript对象中非常相似

Matlab:

fromId = handles.shipAircraftCarrier; %identifier
fromString = handles.('shipAircraftCarrier'); %string
Javascript:

var fromId = handles.shipAircraftCarrier; //identifier
var fromString = handles["shipAircraftCarrier"]; //string

如其他人所述,使用。虽然没有代码来测试它,但我相信简单地在船的周围放上括号将替换结构名称中的字符串,因此

setpixelposition(handles.(ship), [0 250 50 250])

尽可能避免使用eval。

谢谢。我很快就会试试这个。在我看到答案之前,我已经试了一整天了!但我学到了很多——我终于明白了matlab是如何组织所有这些gui的!我认为一切都很混乱,因为我不理解自动生成的代码,花了一段时间才理解它,即我现在意识到“句柄”只是一个结构数组!谢谢变量shipTag是一个字符串变量,它等于ship的标记。我将尝试使用:handles.shipTag而不是handles.shipTag谢谢您的回答。我会尝试这样做,但是其他用户提到我可以把变量放在括号中,比如:setpixelpositionhandles.ship,位置较短。我不认为我需要担心matlab脚本中的字符串注入,特别是因为这个变量不是通过输入框输入的,而是通过gui选择输入的