Customize isequal behavior for handle objects?
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Thomas Kiefer
il 2 Gen 2020
Commentato: Thomas Kiefer
il 3 Gen 2020
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.
0 Commenti
Risposta accettata
Steven Lord
il 2 Gen 2020
If you want to overload what isequal means for your object, overload isequal.
isequal and eq are somewhat related, but they are independent functions.
Più risposte (1)
Vedere anche
Categorie
Scopri di più su Class Introspection and Metadata in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!