Jaki jest właściwy sposób implementacji równości w rubinie

Dla prostej klasy strukturalnej:

class Tiger
  attr_accessor :name, :num_stripes
end

jaki jest właściwy sposób prawidłowego wdrożenia równości, aby to zapewnić==, ===, eql?, itd., i tak, że instancje klasy grają ładnie w zestawach, haszy itp.

EDYTOWAĆ

Ponadto, jaki jest miły sposób na wprowadzenie równości, gdy chcesz porównać na podstawie stanu, który nie jest wystawiony poza klasą? Na przykład:

class Lady
  attr_accessor :name

  def initialize(age)
    @age = age
  end
end

tutaj chciałbym, aby moja metoda równości wzięła pod uwagę @age, ale Pani nie naraża swojego wieku na klientów. Czy w tej sytuacji musiałbym użyć instance_variable_get?

questionAnswers(3)

yourAnswerToTheQuestion