从Matlab中的一个类的所有实例中检索属性,将值写入文件

时间:2013-07-31 08:19:44

标签: matlab oop

我想从工作区中同一类的所有实例中自动检索某些属性。

例如:我有一个C1类,实例有a,b,c,d。      它们中的每一个都具有称为x的特定属性。我想检索所有的x。 我该怎么做?

1 个答案:

答案 0 :(得分:4)

这是一种可能性。假设我想找到工作区中的所有双打。我可以做这样的事情

>> x = 12.3;
>> y = 45.6;
>> z = '789';

获取工作区中所有变量的列表

>> vars = whos();

找出哪些是双打

>> location = strcmp('double',{vars.class});

获取他们的名字

>> names = {vars(location).name};
>> names
names = 
    'x'    'y'

如果你现在想得到一些属性x的数组(比方说我想得到每个双数的余弦)你可以做这样的事情

>> N = length(names);
>> arr = NaN(1,N);
>> for n = 1:N
     obj    = eval(names{n}); # dubious use of 'eval'
     arr(n) = cos(obj);       # assign the relevant property to an array
   end

现在你有了

>> arr
arr =
    0.9647   -0.0469

以下是使用自定义对象的示例。首先,我将此代码放在 DProtein.m

文件中
classdef DProtein
    properties
        x;
        y;
    end
    methods
        function self = DProtein(x, y)
            self.x = x;
            self.y = y;
        end
    end
end

现在我创建了几个对象

>> a = DProtein(1, 'foo'); # a.x = 1
>> b = DProtein(2, 'bar'); # b.x = 2

我像以前一样在工作区中找到正确类的所有对象

>> vars = whos();
>> location = strcmp('DProtein', {vars.class});
>> names = {vars(location).name};

现在循环收集每个对象的数组

>> for n = 1:length(names)
       objects(n) = eval(names{n}); # N.B. important that 'objects' does not
                                    # exist in the workspace before this line!
   end

你可以收集像这样的所有属性

>> [objects.x]
ans =
    1    2