This post describes what I think is a major flaw in Ruby’s built-in class, and proposes a workaround. Struct Documentation for Ruby’s built-in Struct class does a good job of explaining the benefits of using Struct for value objects. This blog post Here’s my gripe with Struct: Although fields in a Struct are named (unlike an array, or ), named/keyword arguments aren’t allowed when instantiating a Struct object. Python’s tuple This defeats the purpose of having named fields in the first place! The benefit of having named fields is that they attach meaning to your data. is undoubtedly more clear than . Birthday.new(day: 5, month: 7) Birthday.new(5, 7) To work around this, I’ve been adding the following class to all projects where I use : Struct This is also , if you’d prefer to not repeat yourself. available as a gem