I don’t have much programming experience. But, to me, Struct seems somewhat similar to Hash.
- What can Struct do well?
- Is there anything Struct can do, that Hash cannot do?
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, whereasFoo = Struct.new(:x); Foo.new(42)==Foo.new(42)is true).to_amethod for structs returns an array of values, whileto_aon a hash gets you an array of key-value-pairs (where “pair” means “two-element array”)Foo = Struct.new(:x, :y, :z)you can doFoo.new(1,2,3)to create an instance ofFoowithout 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.