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