MATLAB: Customize isequal behavior for handle objects

handle classesisequalMATLABoop

Is it possible to customize the isequal function for own classes, i.e. to define when two handle-class objects are considered as equal by content? I would like to explain my question in more detail below:
Please consider the following simple data class
classdef Data < handle
properties
value
end
methods
function self = Data(value)
self.value = value;
end
end
end
Following MathWorks — Equality of Handle Objects one can check if two objects of the Data class point to the same reference using the == operator. In contrast, one can test if two objects are equal by content using the Matlab built-in isequal function.
This works fine. However, I now would like to override the isequal behaviour for my class. For example, I would like to define that two Data objects are equal by content if the values of their property value are equal within an absolute tolerance of 1e-8. How could I achieve that?
Note:
Im aware of the possibility of overriding the eq-method of the Data class:
classdef Data < handle
properties
value
end
methods
function self = Data(value)
self.value = value;
end
function is_eq = eq(self, other)
if not(strcmp(class(self), class(other)))
is_eq = false;
return
end
is_eq = abs(self.value - other.value) < 1e-8;
end
end
end
Therewith I can test the equality of two objects by content using the == operator. However, from my point of view this is problematic because: i) It is inconsistent with the initial/previous behavior because the == operator no longer compares two objects by reference but by content instead. And, ii) in addition, I lose the possiblity to check if two objects have the same reference.

Best Answer

If you want to overload what isequal means for your object, overload isequal.
isequal and eq are somewhat related, but they are independent functions.