Say there is a cell array
A = {'objA', 'objB', 'objC'}
I want to have its members as instances of MyClass (see below) in Matlab. I couldn't get genvarname or eval to work for this.
Essentially I want loop through the array of names, A, and create a MyClass object for each member. This should result in the objects objA, objB and objC.
classdef MyClass
properties
something
name
end
methods
function object = MyClass(name)
object.name = name;
end
end
end
You can define an instance of your user defined class objA using
objA = MyClass('objA')
>> objA = MyClass with properties:
>> something: []
>> name: 'objA'
So to create this from a string, use eval
ObjectName = 'objA';
% We want objA = MyClass('objA')
% Equivalent: eval('objA = MyClass(''objA'')')
% To use the actual name from the variable instead of hard-coding, this becomes:
eval([ObjectName, '= MyClass(''', ObjectName, ''')'])
Note you must include quotes around the ObjectName variable when passing it into MyClass so that it is passed as a string. To include quotes within a string, you must "escape" them using another quote. This is why we get ''' inside the eval statement.
To do this on an array, we can use a simple loop
A = {'objA', 'objB', 'objC'};
for ii = 1:numel(A)
eval([A{ii}, '= MyClass(''', A{ii}, ''')'])
end
However, see the MATLAB documentation for Alternatives to the eval function, because it's really not best practise to do this anyway. You're far better off not naming the variables like this. Store them, for example, in a cell array instead where you know the name for later access.
Objects = cell(1,3);
for ii = 1:numel(A)
Objects{ii} = MyClass(A{ii});
end
You can see this code is much cleaner, easier to debug, and your objects are all stored neatly in a cell array of MyClass objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With