Matlab - 在子类方法中操作数据集

时间:2014-06-05 22:54:07

标签: matlab

我在Matlab(R2010b)中设计数据集的子类时遇到了一些困难。我是经验丰富的编程Matlab,但是使用其OOP功能的新手。我的构造函数似乎很好,但是当我尝试构建一些访问数据集中的数据的方法时,我似乎无法使其工作。这是一个例子:

classdef mydataset < dataset

properties
end

methods
    function [obj] = mydataset(obs,array)
        % obs is N x 1 cell array of strings
        % array is N x 2 double array
        obj = obj@dataset({array,'Field1','Field2'},'ObsNames',obs)
    end

    function [val] = computeValue(obj)
        col = obj.Field1;
        % I get an error above regardless of how I try to access the dataset.
        % e.g. col = double(obj(obs,'Field1')) also does not work.
        % Some more code using col to determine val
    end
end
end

在我的方法computeValue中,我试图使用数据集语法访问数据集中的数据,即在命令行上我可以使用“。”访问Field1。它抱怨mydataset类没有方法,属性或字段Field1。如果我尝试替代语法

col = double(obj(:,'Field1'));

它抱怨obj的大小,例如“指数超过矩阵维度”。

我找到了使用subsref的解决方法:

methods
    function [val] = computeValue(obj)
        s.type = '.';
        s.subs = 'Field1';
        col = subsref(obj,s);
        % Some more code using col to determine val
    end
end

虽然解决方法有效,但它不是很方便,并且在很大程度上违背了想要数据集子类的目的。我缺少一些属性或简单的东西吗?

非常感谢。

埃里克

1 个答案:

答案 0 :(得分:0)

您可以发布课程的完整代码吗?我想你没有申报你的财产&#34;因素&#34;并尝试访问它。

你的课应该是这样的:

classdef MyClass
    properties
        factor;
    end

    methods
        function obj = MyClass(factor)
        % The constructor set the property factor
            obj.factor = factor;
        end

        function val = computeValue(obj)
            col = obj.factor;
            % ...
        end
    end
end