从字符串创建(类对象)变量:Matlab



假设有一个单元格数组

A = {'objA', 'objB', 'objC'}

我想让它的成员作为 Matlab 中MyClass的实例(见下文(。我无法让genvarnameeval为此工作。

本质上,我希望遍历名称数组,A,并为每个成员创建一个MyClass对象。这应该导致对象objAobjBobjC

classdef MyClass
properties
something
name
end    
methods
function object = MyClass(name)
object.name  = name;
end
end
end

您可以使用以下方法定义用户定义类objA的实例

objA = MyClass('objA')
>> objA = MyClass with properties:
>>        something: []
>>             name: 'objA'      

因此,要从字符串创建它,请使用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, ''')'])

请注意,在将ObjectName变量传递到MyClass变量时,必须在该变量两边加上引号,以便将其作为字符串传递。若要在字符串中包含引号,必须使用另一个引号"转义"引号。这就是为什么我们在eval声明中得到'''

要在数组上执行此操作,我们可以使用一个简单的循环

A = {'objA', 'objB', 'objC'};
for ii = 1:numel(A)
eval([A{ii}, '= MyClass(''', A{ii}, ''')']) 
end 

但是,请参阅 MATLAB 文档以了解eval函数的替代方案,因为无论如何,这样做真的不是最佳做法。你最好不要像这样命名变量。例如,将它们存储在单元格数组中,而不是存储在您知道名称以供以后访问的位置。

Objects = cell(1,3);
for ii = 1:numel(A)
Objects{ii} = MyClass(A{ii});
end

您可以看到此代码更简洁,更易于调试,并且您的对象都整齐地存储在MyClass对象的单元格数组中。

最新更新