【问题标题】:How to change variable value in a function of MatlabMatlab函数中如何改变变量值
【发布时间】:2013-12-30 11:13:29
【问题描述】:

代码:

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 几乎相似,但我更新变量的要求仍未满足。虽然那个时候达到了目的。

【问题讨论】:

  • 我见过两种方法:1) 使用全局变量,或 2) 使用传递给回调的句柄的 UserData 属性(带有 get/set)。
  • 请在这个新问题中参考并链接到您之前的(几乎相同的)问题,并描述有什么不同以及为什么之前的解决方案不起作用。

标签: matlab matlab-guide


【解决方案1】:

你需要一个全局变量。

在您的主脚本中,声明一个全局变量并为其赋值 3。

global key = 3;

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

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

【讨论】:

    【解决方案2】:

    如果您不想使用全局变量,请添加到您的 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;我发现整个过程非常痛苦,我只是恢复到全局变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多