【问题标题】:matlab variable shared to another functionmatlab 变量共享给另一个函数
【发布时间】:2013-06-06 23:45:06
【问题描述】:

在一个父函数内部,我有一个与 gui 上的按钮相关的回调函数。

当按钮被按下时,它所做的一件事就是定义一个需要持久化的变量(比如说 X),以便稍后父函数的另一个子函数可以使用 X。 (即回调函数A创建变量X。 稍后,functionB 需要知道变量 X,才能知道要采取的特定路径)

有没有办法解决这个问题? 我已经阅读了有关使用句柄将其传递给第二个函数的内容,但我似乎无法找到一种方法来做到这一点。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    间接来自 Matlab guidata documentation:

    在第一个回调函数中:

    function first_Callback(hObject, eventdata, handles)
    
    % add some additional data as a new field called x
    handles.x = 1;
    % Save the change you made to the structure
    guidata(hObject, handles)
    

    在第二个回调函数中只需使用handles.x,因为句柄已经作为参数传递给第二个回调,如果它们属于同一个父图形。

    function second_Callback(hObject, eventdata, handles)
    
    % a will have the value 1
    a = handles.x;
    

    注意:即使您将句柄保存到hObject(这是调用回调函数的当前对象),句柄结构对同一图窗上的其他对象也是可见的。将handles 结构保存到hObject 和保存到父图形实际上是相同的。此外,如果您对handles 结构进行更改,则只需使用guidata。如果只读取handles 成员的值,则无需保存。

    【讨论】:

    • 对不起,只是为了确定一些事情,并澄清一点......我实际上有三个 pushButton uicontrols,所有这些都返回值(实际上是两个,比如说,x 和 y) .在函数中替换时,第二个 (y) 设置为句柄。y 返回“错误”“变量‘句柄’,显然是一个结构,已更改但值似乎未使用”。有什么想法吗?
    • 记住handles是一个结构。您不能引用未定义的结构成员。也就是说,您首先必须定义handles.x = 1,然后才能说a = handles.x。如果在某些情况下您的第二个按钮可能希望在设置之前读取 handles.x 的值,请在图形加载回调中定义 handles.x = 0 或类似的默认值并使用 guidata 保存它
    • 图加载回调是指_OpeningFcn主图的回调函数。
    • 我在让它工作时遇到问题,抱歉,对 matlab 中提出的许多概念有点新。当我尝试定义一个基于handles.x 时,它告诉我没有足够的输入参数。
    • 我可以在这里获得更多帮助吗?在一个小测试文件中,我尝试处理句柄,但我不断收到输入参数错误
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多