NamedStruct — Improving Ruby’s Struct

Paul Kuruvilla
Oct 8, 2017 · 1 min read

This post describes what I think is a major flaw in Ruby’s built-in Struct class, and proposes a workaround.

Documentation for Ruby’s built-in Struct class

This blog post does a good job of explaining the benefits of using Struct for value objects.

Here’s my gripe with Struct: Although fields in a Struct are named (unlike an array, or Python’s tuple), named/keyword arguments aren’t allowed when instantiating a Struct object.

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. Birthday.new(day: 5, month: 7) is undoubtedly more clear than 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 available as a gem, if you’d prefer to not repeat yourself.

HackerNoon.com

how hackers start their afternoons.

Paul Kuruvilla

Written by

Practical and fact-minded individual, whose reliability cannot be doubted.

HackerNoon.com

how hackers start their afternoons.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade