почему моя структурная переменная не содержит изменений, примененных моими функциями дескриптора - PullRequest
0 голосов
/ 16 июня 2019

Я создал структуру, которая содержит поля и группу функций-дескрипторов. Я инициализировал свою структуру, когда нажимаю кнопку в моем 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, которое перебирает каждый дескриптор, содержащийся в поле выполнения, и использует assignin, чтобы увидеть в рабочей области мою переменную struct со своими новыми полями.

1 Ответ

3 голосов
/ 16 июня 2019

Вы не захватываете вывод функции.В Matlab нет ссылок, вам нужно скопировать новую измененную структуру.

Вместо:

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

Do:

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

Также struct isхудшее имя, которое вы можете выбрать.Это не только плохое программирование, потому что оно ничего не говорит о том, что это такое, вы скрываете имя MATLABs struct, поэтому оно не может его использовать.Я настоятельно рекомендую изменить имя.

...