Desde el Struct documentación:
una estructura es una forma conveniente de agrupe una cantidad de atributos, utilizando métodos de acceso, sin tener que escribir una clase explícita.
Por otro lado, un Hash:
A Hash es una colección de pares de clave y valor. Es similar a una matriz, excepto que la indexación se realiza mediante claves arbitrarias de cualquier tipo de objeto, no como un índice entero. El orden en el que recorre un hash por clave o valor puede parecer arbitrario, y generalmente no estará en el orden de inserción.
La principal diferencia es cómo accede a sus datos.
ruby-1.9.1-p378 > Point = Struct.new(:x, :y)
=> Point
ruby-1.9.1-p378 > p = Point.new(4,5)
=> #<struct Point x=4, y=5>
ruby-1.9.1-p378 > p.x
=> 4
ruby-1.9.1-p378 > p.y
=> 5
ruby-1.9.1-p378 > p = {:x => 4, :y => 5}
=> {:x=>4, :y=>5}
ruby-1.9.1-p378 > p.x
NoMethodError: undefined method `x' for {:x=>4, :y=>5}:Hash
from (irb):7
from /Users/mr/.rvm/rubies/ruby-1.9.1-p378/bin/irb:17:in `<main>'
ruby-1.9.1-p378 > p[:x]
=> 4
ruby-1.9.1-p378 > p[:y]
=> 5
En resumen, se haría un nuevo Struct cuando se desea una clase que es un "plain old data" structure (opcionalmente con la intención de ampliarlo con más métodos), y se utilizaría un hash cuando no se necesita una tipo formal en absoluto.
Sus otros puntos son los correctos (por lo que 1 para eso), pero [ 'Struct # == '] (http://ruby-doc.org/core/classes/Struct.html#M000890) funciona de manera diferente a lo que explicaste cuando realmente almacena el resultado de' Struct.new' en lugar de llamarlo dos veces con los mismos argumentos –
@MarkRushakoff: Si hago 'Foo = Struct.new (: x); Bar = Struct.new (: x) 'y luego hacer' Foo.new (42) == Bar.new (42) 'Voy a obtener falso. Si hago 'Foo.new (42) == Foo.new (42)' Me haré realidad. Y si lees con cuidado, eso es exactamente lo que dije (Dos instancias de * diferentes * estructuras "). – sepp2k
Veo lo que quieres decir. No estaba claro para mí porque no lo contrastabas con una explicación de que la igualdad funciona como se espera cuando se utiliza el mismo tipo de estructura –