我对 MATLAB 中的面向对象编程比较陌生,所以也许我只是不了解它背后的哲学,但我似乎无法弄清楚这一点。我想要一组对象属性。一个属性是在对象创建时静态创建的,另一个是一个递增值,用于存储与对象使用相关的信息。
classdef MyClass
properties
max_inc; % Statically created cap on the incrementer
incr; % The incrementer
end
methods
% Constructor
function c = MyClass(set_max)
c.max_inc = set_max;
c.incr = 1;
end
% Function to do some stuff
function value = Next(c)
% Do some stuff
set(c, 'incr', c.incr + 1);
end
% Set function which is causing me trouble
function c = set.incr(c, value)
if(value <= c.max_inc)
c.incr = value;
else
c.incr = 1;
end
end
end
end
通过摆脱 set 函数并将函数实现Next(c)
为:
% Function to do some stuff
function value = Next(c)
% Do some stuff
curr_inc = c.incr;
if(curr_inc < c.max_inc)
c.incr = curr_inc + 1;
else
c.incr = 1;
end
end
当它运行时,它实际上似乎并没有改变incr
whenNext(c)
被调用的值(它总是认为incr
是起始值)。我不想incr
依赖,因为它确实需要存储它的值,所以我知道它之前增加了多少次,我不能把它变成一个句柄对象,因为我需要多个同时处于活动状态(除非我完全误解了句柄对象的工作原理)。有没有办法做到这一点?这似乎对一个对象来说应该是一件非常容易的事情。
编辑:我忘了明确询问是否有办法使这项工作,但这样做的地方增量器逻辑是在我最初尝试过的 set 函数中处理的(这似乎是它更合乎逻辑的地方,并将制作更具可读性的代码)。