0

我目前正在为学校做我的 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 会按字面意思获取字符串,而不是获取其值。改用变量会非常方便!

如果有人有任何解决方案,我将不胜感激。我已经在网上搜索过,但也许我缺少对 Matlab GUI 内容的一些基本理解——matlab 帮助文档非常不具描述性,并没有太大帮助。

4

3 回答 3

0

您可以使用该eval函数执行此操作,但您需要小心字符串注入:

setpixelposition(eval(strcat('handles.',ship)), [0 250 50 250])  
于 2012-04-24T20:22:53.313 回答
0

您可以使用动态字段名或getfieldstructs在 Matlab和 Javascript中,使用标识符与字符串的字段索引非常相似objects

MATLAB:

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

Javascript:

var fromId = handles.shipAircraftCarrier; //identifier
var fromString = handles["shipAircraftCarrier"]; //string
于 2012-04-24T22:44:21.887 回答
0

正如其他人提到的那样,使用动态字段名。虽然没有代码来测试它,但我相信只需在周围放置括号即可将字符串替换为结构名称,因此

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

如果可能,尽量避免使用 eval()。

于 2012-04-25T11:45:25.857 回答