ruby ruby-1.9.3 openstruct

ruby - ¿Cuándo debo usar un OpenStruct en lugar de un Hash?



ruby-1.9.3 (2)

Creo que esto se debe principalmente a una decisión de rendimiento. De la Documentación Ruby :

Un OpenStruct utiliza la estructura de búsqueda de métodos de Ruby para encontrar y definir los métodos necesarios para las propiedades. Esto se logra a través del método method_missing y define_method.

Esto debería ser una consideración si hay una preocupación sobre el rendimiento de los objetos que se crean, ya que hay una sobrecarga mucho mayor en la configuración de estas propiedades en comparación con el uso de Hash o Struct.

Además, algo como un Hash tiene una funcionalidad adicional con todos los métodos que proporciona ( has_key? Etc.). OpenStruct es un objeto muy simple desde ese punto de vista, pero si no tiene ninguna preocupación desde un punto de vista de rendimiento y solo quiere un objeto fácil para trabajar, OpenStruct es una buena opción.

Me gusta la "definición de atributos arbitrarios" y creo que OpenStruct en ruby ​​a veces se siente más limpio que usar un hash, pero tengo curiosidad por saber si hay otras ventajas específicas o casos de uso que hacen de OpenStruct una mejor opción que simplemente usar un hash.


OpenStruct objetos OpenStruct son útiles cuando necesita que algo se ajuste a una determinada interfaz de llamada de método (es decir, envíe un objeto #name tipo pato respondiendo a #name y #value ), o cuando quiera encapsular los detalles de la implementación, pero también desee evitar la sobrecarga. Ingeniería de la solución. También hacen un objeto de stub impresionante, y a menudo los uso en lugar de stubs de marco cuando no necesito la sobrecarga de un stub / simulacro.