我有一个名为TestData
的类,它包含一个名为data
的私有属性,我将其定义为数字数组。它的目标是从各种其他.m
文件中获取数据并提取数据并将其放置在指定的格式(数字数组。因此,我目前正在处理的random_data.m
文件吐出一个名为Avec
的 1X13 双数组。我生成类myTestData = TestData()
的实例;但是,由于成员变量是私有的,我需要具有getData
和setData
函数。我唯一的想法是将Avec
传递到getData
(例如myTestData.getData(Avec)
(,然后将其存储在一个临时数组中,然后setData
可以使用该数组写入data
;但我觉得这是不好的做法,因为该数组需要公开。另外,传入整个数组是否有意义,或者我应该单独传入每个元素。我想让它检查数据以确保它的格式也正确。
我想总的来说,我对类在 MATLAB 中的工作方式的概念可能是有缺陷的。
提前感谢您的帮助,如果还有其他我可以提供的,请告诉我。下面是一些代码。类上方的第一个代码段来自单独的.m
文件。
%Write data to file using the TestData Object
Avec = [some 1X13 double array]
myTestData=TestData; % Generate an instance of the object
myTestData.getData(Avec);
classdef TestData
properties (Access = private)
metaData % stores meta data in Nx2 array
data % stores data in PxQ array
colLabels % labels columns
colUnits % provides units
metaPrint % used to print metaData
temp % debugging purposes only
end
methods
%****************************************************************************%
%Function: TestData
%Purpose: Constructor used to allocate data arrays
%****************************************************************************%
function this = TestData() %constructor
this.metaData = [];
this.data = [];
this.colLabels = [];
this.colUnits = [];
this.metaPrint = [];
this.temp = [];
end %TestData()
%%
%****************************************************************************%
%Function:
%Inputs:
%Purpose:
%****************************************************************************%
function this = getData(this, someArray)
????
end %getData
我认为你误解了getters和setters的想法。get 函数旨在从对象中获取某些内容并返回它,而 setter 旨在将某些内容放入对象的属性中。你会想要这样的东西:
function data = getData(this)
data = this.data;
% Do any processing to put data into a different format for output
end
function this = setData(this, data)
% Check the data input to make sure it is the right format, etc.
this.data = data;
end
您可能还希望设计setData
来采用不同类型的参数,例如可用于加载矩阵本身的文件名。您还可以将构造函数设计为接受矩阵或文件名并初始化data
。
此外,正如 Cris 在他的评论中提到的那样,如果您将data
设为私有的原因是控制用户如何访问和修改它,那么只需拥有 getter 和 setter 就足够了。您可以公开data
属性访问方法,并且在访问对象(如Avec = myTestData.data
或myTestData.data = Avec
(时仍将调用您的属性访问方法。