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 # => ∞
I'm surprised every time I look at the RDoc for Struct
that it doesn't do this.