从string:Matlab创建(类对象)变量

时间:2017-08-09 11:39:18

标签: matlab class eval cell-array

假设有一个单元格数组

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

1 个答案:

答案 0 :(得分:2)

您可以使用

定义user defined class 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 的原因。

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

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

但是,请参阅Alternatives to the eval function的MATLAB文档,因为无论如何都不是最佳实践。 你最好不要命名这样的变量。例如,将它们存储在单元格数组中,而不是您知道名称以供以后访问。

MyClass

您可以看到此代码更清晰,更易于调试,并且您的对象全部存储在<ul> <li *ngFor="let word of dictionary"> {{word}} </li> </ul> 个对象的单元格数组中。