A Ruby Struct позволяет создавать экземпляр с помощью набора аксессуаров:
# Create a structure named by its constant
Customer = Struct.new(:name, :address) #=> Customer
Customer.new("Dave", "123 Main") #=> #<Customer name="Dave", address="123 Main">
Это выглядит удобно и мощно, однако Hash делает что-то довольно похожее:
Customer = {:name => "Dave", :address => "123 Main"}
Каковы реальные ситуации, когда я должен предпочесть Struct (и почему), и каковы предостережения или подводные камни при выборе одного над другим?