定制isequal行为处理对象?

24日视图(30天)
可以定制吗 isequal 函数的类,即当两个句柄类定义对象视为平等的内容?我想详细说明我的问题如下:
请考虑以下简单的数据类
classdef<数据处理
属性
价值
结束
方法
函数自我=数据(值)
自我。价值= value;
结束
结束
结束
MathWorks——处理对象的平等 你可以检查如果两个对象 数据 使用类指向同一个引用 = = 操作符。相比之下,一个可以测试如果两个对象是相等的,使用Matlab内置的内容 isequal 函数。
这是很好。但是,我现在想覆盖 isequal 为我的类的行为。例如,我想定义这两个 数据 对象是相等的,如果他们的财产的价值内容 价值 在一个绝对的宽容是相等的 1 e-8。 我怎么可能实现呢?
注意:
我意识到压倒一切的可能性 情商 的方法 数据 类:
classdef<数据处理
属性
价值
结束
方法
函数自我=数据(值)
自我。价值= value;
结束
函数is_eq = eq(自我,其他)
如果(strcmp(类(自我),类(其他)))
is_eq = false;
返回
结束
is_eq = abs(自我。价值- other.value) < 1e-8;
结束
结束
结束
于是我可以测试两个对象的平等使用的内容 = = 操作符。然而,在我看来这是有问题的,因为: 我) 这是不符合最初的/以前的行为,因为 = = 运营商不再比较两个对象引用,而是内容。而且, (二) 此外,我失去了检查的可能性两个对象具有相同的参考。

接受的答案

史蒂文的主
史蒂文的主 2020年1月2日
如果你想超载 isequal 意味着你的对象,过载 isequal
isequal 情商 有些关联,但它们是独立的功能。
1评论
托马斯·基弗
托马斯·基弗 2020年1月2日
我不知道事实 isequal 可能是超载对自己的类。非常感谢!

登录置评。

答案(1)

托马斯·基弗
托马斯·基弗 2020年1月3日
一个后续问题:当覆盖 isequal 在一个自定义类,即中 数据 类,怎么可能一个访问先前定义的 isequal (如果我不会有重载的方法)?因为 isequal 不是基类的成员方法 处理
即。,我想做什么在我的自定义 isequal 方法是让一些快速检查我可以verfiy对象的对象是不同的,只有在这些检查使用完整isequal-test传递。像这样:
classdef<数据处理
属性
价值
结束
方法
函数自我=数据(值)
自我。价值= value;
结束
函数is_eq = isequal(自我,其他)
% %做出一些特定于用户的测试
% %,如果自我和帮助快速决定
%是不平等的
%……
%……
% %以上标准是否满足使用
% % Matlab默认isequal……像isequal@superclass(自我,其他)
is_equal = isequal(自我,其他);
结束
结束
结束

类别

找到更多的在处理类帮助中心文件交换

s manbetx 845


释放

R2019b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!