Customize isequal behavior for handle objects?
Mostrar comentarios más antiguos
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.
Respuesta aceptada
Más respuestas (1)
Thomas Kiefer
el 3 de En. de 2020
0 votos
2 comentarios
Walter Roberson
el 3 de En. de 2020
builtin('isequal', self, other)
Thomas Kiefer
el 3 de En. de 2020
Categorías
Más información sobre Class Introspection and Metadata en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!