Compare objects for equality
Normally using == between two instances will only return true if they are the exact same objects in the memory.
If "only" all the attributes are the same then == will be false.
To be able to compare two objects based on their attributes only we can used the def_equals macro.
class Person
def_equals @name, @height
property name : String
property height : Float64
def initialize(@name, @height)
end
end
prs1 = Person.new(name: "Jane", height: 173.1)
prs2 = prs1.dup
prs3 = Person.new(name: "Jane", height: 173.1)
prs4 = prs1
prs5 = Person.new(name: "Jane", height: 173.2)
p! prs1
p! prs2
p! prs3
puts prs1 == prs2 # true
puts prs1 == prs3 # true
puts prs1 == prs4 # true
puts prs1 == prs5 # false