2016-03-04 113 views
1

我想要幾乎所有功能於一身的功能,在主要功能和嵌套函數中創建GUI和必要變量以用作回調操作。從GUI訪問嵌套函數

當我有

function[]=foo() 
A=1; 

uicontrol('style','pushbutton','callback','A=bar(A);') 

function[OUT]=bar(IN) 
OUT=IN+1; 

我得到錯誤:

Undefined function 'bar' for input arguments of type 'double'. 

Error while evaluating uicontrol Callback` 

如果foo是一個腳本,barbar.m文件時,它的工作原理定義。在我看來,回調在MATLAB工作空間中的默認變量和當前工作目錄中的腳本/功能中使用。 如何訪問嵌套調用函數(這裏的功能bar

+0

我已閱讀您的問題5次,我仍然無法掌握您正在嘗試做什麼。你是否可以擴展一下你對你正在試圖做什麼,做什麼以及你不喜歡什麼的重新解釋? –

+1

我想調用創建GUI的函數內定義的函數和變量。 – Crowley

回答

2

爲了定義回調調用函數(這裏的變量A)定義的變量和函數,我發現使用anonymous functions最可靠的方法。也就是說,如果barfoo的嵌套函數,那麼它已經可以訪問A並且可以修改A

function = foo() 
    A = 1; 

    uicontrol('style', 'pushbutton', 'callback', @(s,e)bar()) 

    % This is a nested function that already has access to A 
    function bar() 
     A = A + 1; 
    end 

    % Let's call bar here to demonstrate it updates A 
    bar(); 
    disp(A); 
end 

另外,您的回調函數實際上不能將輸出結果傳遞迴控件的回調函數的工作區。如果你想返回一個結果,你可能想要1)將結果存儲在圖形對象的UserData中,2)使用我們已經顯示的嵌套子函數,或者3)將自定義句柄對象的句柄傳遞給回撥(classdef object < handle

+0

這正是我正在尋找的。 – Crowley