我在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
虽然解决方法有效,但它不是很方便,并且在很大程度上违背了想要数据集子类的目的。我缺少一些属性或简单的东西吗?
非常感谢。
埃里克
答案 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