Мне нравится «определение произвольных атрибутов», и я думаю, что OpenStruct в ruby иногда кажется более чистым, чем использование хэша, но мне любопытно, есть ли другие конкретные преимущества или варианты использования, которые делают OpenStruct лучшим выбором, чем простое использование Хеш.
Когда мне следует использовать OpenStruct вместо хеша?
Ответы (2)
Я думаю, что это в основном сводится к решению о производительности. Из документации Ruby:
OpenStruct использует структуру поиска методов Ruby для поиска и определения необходимых методов для свойств. Это достигается с помощью методов method_missing и define_method.
Это следует учитывать, если есть опасения по поводу производительности создаваемых объектов, поскольку при настройке этих свойств накладные расходы намного выше, чем при использовании Hash или Struct.
Кроме того, что-то вроде Hash
имеет дополнительные функции со всеми предоставляемыми им методами (has_key?
, include?
и т. Д.). OpenStruct
- очень простой объект с этой точки зрения, но если у вас нет никаких проблем с точки зрения производительности и вы просто хотите, чтобы с ним было легко работать, OpenStruct
- хороший выбор.
Объекты OpenStruct
полезны, когда вам нужно что-то, чтобы соответствовать определенному интерфейсу вызова метода (например, отправить объект типа утка, отвечающий на #name
и #value
), или когда вы хотите инкапсулировать детали реализации, но также хотите избежать чрезмерной разработки решение. Они также создают отличный объект-заглушку, и я часто использую их вместо заглушек фреймворка, когда мне не нужны накладные расходы на заглушку / макет.