Constructors for classes defined with ::define accept both positional and keyword arguments.| docs.ruby-lang.org
Value objects are compared using only the values of their properties, having no conceptual identity| martinfowler.com