I don't have much programming experience. But, to me, Struct seems somewhat similar to Hash.
After googling, the concept of Struct is important in C, but I don't know much about C.
Structs differ from using hashmaps in the following ways (in addition to how the code looks):
Struct.new(:x).new(42) == Struct.new(:x).new(42)
is false, whereas Foo = Struct.new(:x); Foo.new(42)==Foo.new(42)
is true).to_a
method for structs returns an array of values, while to_a
on a hash gets you an array of key-value-pairs (where "pair" means "two-element array")Foo = Struct.new(:x, :y, :z)
you can do Foo.new(1,2,3)
to create an instance of Foo
without having to spell out the attribute names.So to answer the question: When you want to model objects with a known set of attributes, use structs. When you want to model arbitrary use hashmaps (e.g. counting how often each word occurs in a string or mapping nicknames to full names etc. are definitely not jobs for a struct, while modeling a person with a name, an age and an address would be a perfect fit for Person = Struct.new(name, age, address)
).
As a sidenote: C structs have little to nothing to do with ruby structs, so don't let yourself get confused by that.