我有一个名为TestData
的类,其中包含一个称为data
的私有属性,该属性定义为数字数组。它的目标是从其他.m
个文件中提取数据,然后提取数据并将其以指定的格式(数字数组)放置。因此,我目前正在使用的random_data.m
文件会吐出1X13双重数组Avec
。我生成类myTestData = TestData()
的实例;但是,由于成员变量是私有的,因此我需要具有getData
和setData
函数。我必须将Avec
传递到getData
(例如myTestData.getData(Avec)
)中,然后将其存储在一个临时数组中,然后setData
可以使用它写入{{1} };但是我觉得这是一种不好的做法,因为该数组需要公开。另外,将整个数组传入还是应该单独传入每个元素是否有意义,我想让它将数据检查到确保其格式正确。
我通常认为我在MATLAB中如何使用类的概念可能存在缺陷。
感谢您的提前帮助,如果我能提供其他帮助,请告诉我。下面是一些代码。该类上方的第一个代码段来自单独的data
文件。
.m
答案 0 :(得分:3)
我认为您误会了吸气剂和吸气剂的概念。 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 alludes to in his comment一样,如果将data
设为私有的原因是为了控制用户访问和修改它的方式,那么只需要使用getter和setter就足够了。您可以将data
公开,访问Avec = myTestData.data
或myTestData.data = Avec
之类的对象时,您的property access methods仍会被调用。