0

我创建了一个包含字段和一组句柄函数的结构。当我从我的 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 变量及其新字段。

4

1 回答 1

3

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

代替:

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

做:

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

也是struct您可以选择的最糟糕的名称。不仅是糟糕的编程,因为它没有说明它是什么,而且你正在掩盖 MATLAB 的struct名称,所以它不能使用它。我强烈建议更改名称。

于 2019-06-16T19:52:38.420 回答