如何在Matlab函数中更改变量值

时间:2013-12-30 11:13:29

标签: matlab matlab-guide

代码:

function send_Callback(hObject, eventdata, handles)
         key = 3; %this is the variable
         current = str2double(get(handles.value, 'String'));
         %value is a textbox where user put input
         newValue = key+current;
         set(handles.listbox1,'String', newValue)
         %listbox1 is a listbox to show the value
         %Now I want to replace the value of key by the value of current
         %key = current - something like this

我期待的是什么:我希望密钥将替换为当前值(例如8)。因此,当我再次在文本框中输入内容时(例如12),它将添加先前的当前值(例如8,然后newValue将为12 + 8)。

我得到了什么:每当我点击按钮时,每次都将键设置为3并添加当前值。但我希望钥匙永久更换,或者在首次使用后至少放在一边。

义务:当我启动程序并第一次单击“发送”按钮时,此处显示为3的键值必须精确为3。实际上我将在以后使用上述概念进行加密/解密[对于构建块我只使用一个添加],所以我的密钥第一次必须为设备所知,然后用户可以在需要时更改它

其他评论: My previous post几乎相似,但我对更新变量的要求仍未实现。目的是在那个时候服务。

2 个答案:

答案 0 :(得分:0)

你需要一个全局变量。

在主脚本中,声明一个全局变量并为其指定3。

global key = 3;

在函数内部,首先告诉Matlab您正在使用全局变量键。然后根据需要进行修改。

function send_Callback(hObject, eventdata, handles)
     global key;   % Tell matlab to use the global varaible key instead of a new local variable.
     current = str2double(get(handles.value, 'String'));
     [newValue, key] = [key + current, current];
     % Do something with the newValue here...
end

答案 1 :(得分:0)

如果您不想使用全局变量,请添加到GUI初始化函数:

handles.key = 3
guidata(hObject, handles)

然后在代码中使用handles.key代替key,确保在最终分配之后和函数返回之前调用guidata(hOjbect, handles)。请参阅http://www.mathworks.com/help/matlab/ref/guidata.html,基本上设置了一个存储在handles中的“变量”(实际上是handles结构的字段,我相信),您必须致电guidata()实际保存更改。这意味着你也在传递hObject;我发现整个程序都是如此痛苦,我只是回归全局。