Если все, что вы хотели сделать, это сохранить название блока, то да. Если вы хотите некоторые данные и описательное имя, я думаю, что структура будет работать как:
data = struct([blkName 'Values'],[]);
set_param(gcb,'UserData',data);
Затем, когда вы получите данные, которые вы используете,
ud = get_param(gcb,'UserData');
% ud.([blkName 'Values']) <- your data
Или вы могли бы использовать глобальную appdata
хранения :
setappdata(0,[blkName 'Values'],data);
data = getappdata(0,[blkName 'Values']);
Или вы могли бы переписать функцию во время выполнения, чтобы создать переменную с именем, которое вы хотите, Ик, но я видел подобные вещи. НТН!
EDIT UserData
является методом, который я использовал много раз для диалогового обратного вызова, так что я уверен, что он будет работать, однако я не могу полностью понять ваше приложение. :-)
EDIT Если вам нужны данные сохраняться каждый раз при загрузке модели, то вы должны установить параметр UserDataPersistent
в 'on'
. Это раздражающая, но, по-видимому, необходимая функция, чтобы выбрать, следует ли забывать о том, что произошло после закрытия модели и вымывания памяти. Поскольку это ваш прецедент, переменные persistent
в m-скрипте не будут работать, поскольку они забываются, когда Matlab завершается. Я считаю, что вам нужно будет использовать как setpref, чтобы он сохранялся между сессиями Matlab.
Рассматривали ли вы использование поля «UserData» на блоке? Это было бы гораздо более надежным решением. – macduff
@macduff Итак, мне нужно было сделать что-то вроде 'set_param (gcb, 'UserData', [blkName 'Values'])'? –