从字符串创建(class 对象)变量:Matlab
Create (class object) variable from string: Matlab
假设有一个元胞数组
A = {'objA', 'objB', 'objC'}
我想在 Matlab 中将其成员作为 MyClass
(见下文)的实例。我无法让 genvarname
或 eval
为此工作。
本质上,我想遍历名称数组 A
,并为每个成员创建一个 MyClass
对象。这应该导致对象 objA
、objB
和 objC
.
classdef MyClass
properties
something
name
end
methods
function object = MyClass(name)
object.name = name;
end
end
end
您可以使用
定义 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
时,您必须在其周围加上引号,以便它作为字符串传递。要在字符串中包含引号,您必须 "escape" 使用另一个引号。这就是我们在 eval
语句中得到 '''
的原因。
要在数组上执行此操作,我们可以使用一个简单的循环
A = {'objA', 'objB', 'objC'};
for ii = 1:numel(A)
eval([A{ii}, '= MyClass(''', A{ii}, ''')'])
end
但是,请参阅 Alternatives to the eval
function 的 MATLAB 文档,因为这样做确实不是最佳做法。 你最好不要像这样命名变量。例如,将它们存储在元胞数组中,而不是您知道名称以供以后访问的地方。
Objects = cell(1,3);
for ii = 1:numel(A)
Objects{ii} = MyClass(A{ii});
end
您可以看到这段代码更简洁,更易于调试,并且您的对象都整齐地存储在 MyClass
个对象的元胞数组中。
假设有一个元胞数组
A = {'objA', 'objB', 'objC'}
我想在 Matlab 中将其成员作为 MyClass
(见下文)的实例。我无法让 genvarname
或 eval
为此工作。
本质上,我想遍历名称数组 A
,并为每个成员创建一个 MyClass
对象。这应该导致对象 objA
、objB
和 objC
.
classdef MyClass
properties
something
name
end
methods
function object = MyClass(name)
object.name = name;
end
end
end
您可以使用
定义 user defined classobjA
的实例
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
时,您必须在其周围加上引号,以便它作为字符串传递。要在字符串中包含引号,您必须 "escape" 使用另一个引号。这就是我们在 eval
语句中得到 '''
的原因。
要在数组上执行此操作,我们可以使用一个简单的循环
A = {'objA', 'objB', 'objC'};
for ii = 1:numel(A)
eval([A{ii}, '= MyClass(''', A{ii}, ''')'])
end
但是,请参阅 Alternatives to the eval
function 的 MATLAB 文档,因为这样做确实不是最佳做法。 你最好不要像这样命名变量。例如,将它们存储在元胞数组中,而不是您知道名称以供以后访问的地方。
Objects = cell(1,3);
for ii = 1:numel(A)
Objects{ii} = MyClass(A{ii});
end
您可以看到这段代码更简洁,更易于调试,并且您的对象都整齐地存储在 MyClass
个对象的元胞数组中。