/immutable_struct

An immutable version of Ruby's Struct class

Primary LanguageRubyMIT LicenseMIT

ImmutableStruct

An immutable implementation of Ruby's Struct class. It works just as Struct, but there are no setters, and you can't use []=.

class Spaceship < ImmutableStruct.new(:name, :max_speed)
end

ship = Spaceship.new('Enterprise', 'Warp 9')

puts ship.max_speed # => Warp 9

ship.max_speed = '299792458 m/s' # raises NoMethodError

In addition to the above, ImmutableStruct enhances the constructor to accept a hash (but as you can see above the Struct behaviour works too):

ship = Spaceship.new(:max_speed => '∞', :name => 'The TARDIS')

puts ship.max_speed # => ∞

You can create a strict version of the struct, which will raise an error if you initialize it with a Hash that does not contain all the fields of the struct

StrictSpaceship = Spaceship.strict

strict_ship = StrictSpaceship.new(:name => 'Enterprise') # raises ArgumentError

I'm surprised every time I look at the RDoc for Struct that it doesn't do this.