Это именно то, для чего eval
.Да, вам следует избегать использования eval
, но если вы хотите иметь тип пользователя в материале, который нужно оценить, вам нужно eval
. или evalin
, если вы хотите оценить его в базовом или рабочем пространстве вызывающего абонента , а не в текущем рабочем пространстве.
Не существует такой вещи, как "дескрипторы объектов" (кроме графических объектов, ноэто не то, о чем ты здесь говоришь).Есть переменные, владеющие массивами данных, вот и все.
Если вы не доверяете своим пользователям, не используйте eval
.Они могут вводить что угодно, включая clear all
или !\rm -rf /*
(или любой другой эквивалент Windows для стирания диска).
В этом случае и при условии, что существует ограниченный набор переменных, которые пользователь можетуточните, сделайте
var1 = 1;
var2 = 2;
varnames = {'var1','var2'}; % Simulink.Parameter objects existing in workspace
objects = cell(size(varnames));
for i = 1:numel(varnames)
objects{i} = get_variable_value(varnames{i}) % Store objects in a cell array
end
function val = get_variable_value(name)
switch name
case 'var1'
val = evalin('caller',var1);
case 'var2'
val = evalin('caller',var2);
otherwise
error('Illegal variable name')
end