为什么我的结构变量不包含我的句柄函数所应用的更改

时间:2019-06-16 19:04:05

标签: matlab user-interface structure assign handle

我创建了一个包含字段和一组句柄函数的结构。 当我从Matlab GUI中按下按钮时,我初始化了结构,然后继续调用句柄函数,该函数将新字段添加到结构中或更新了默认字段。 但是,尽管将结构分配给了我的工作区,但我还是很难看到更改,因为我希望在其他函数中调用它来使用更新的字段。

我用了assignin(ws,var,val)和evalin(ws,expression)

function struct = initialisedStruct(arg)
    struct = struct ();    
    struct.a = arg;
    struct.b = 1;       

    struct.run= {...
         @aaaa,... %update some existed fields
         @bbbb, ...%add here a new field call c. -> struct.c now exists.
         @cccc,... %do something else
         };
end

function [applyToStructure] = applyMethod(applyToStructure, handles)
    for i = 1:length(handles)
        [applyToStructure] = handles{i}(applyToStructure);
    end
end

function clickOnThisButton(hObject, eventdata, handles)
    input = 12;
    struct = initialisedStruct(input);
    applyMethodHandles(struct, struct.run); %modify the struct
    assignin('base', 'struct', struct);
end

function clickOnAnotherButton(hObject, eventdata, handles)
    myvar = struct.c; % here is my problem as it does not exist
end

我希望在应用applyMethodHandles之后,该方法循环遍历run字段中包含的每个句柄并使用assignin,以在工作区中查看具有新字段的struct变量。

1 个答案:

答案 0 :(得分:3)

您没有获取函数的输出。 matlab中没有引用,您需要复制新的修改后的结构。

代替:

applyMethodHandles(struct, struct.run); %modify the struct

要做:

struct=applyMethodHandles(struct, struct.run); %modify the struct

struct也是您可以选择的最差的名称。不好的编程不仅因为它什么都没说而已,而且还在掩盖MATLAB struct的名称,因此它不能使用它。我强烈建议更改名称。