Когда я должен использовать OpenStruct вместо Hash?

Мне нравится "определение произвольных атрибутов", и я думаю, что OpenStruct в ruby ​​иногда чувствует себя чище, чем использование хеша, но мне любопытно, есть ли другие конкретные преимущества или варианты использования, которые делают OpenStruct лучшим выбором, чем просто использование хэш

2 ответа

Решение

Я думаю, что это в основном сводится к решению о производительности. Из документации по Ruby:

OpenStruct использует структуру поиска методов Ruby для поиска и определения необходимых методов для свойств. Это достигается с помощью метода method_missing и define_method.

Это следует учитывать, если существует обеспокоенность по поводу производительности создаваемых объектов, так как при настройке этих свойств значительно больше накладных расходов по сравнению с использованием хэша или структуры.

Кроме того, что-то вроде Hash имеет дополнительную функциональность со всеми методами, которые он предоставляет (has_key?, include?, так далее.). OpenStruct это очень простой объект с этой точки зрения, но если у вас нет проблем с точки зрения производительности и вы просто хотите работать с легким объектом, OpenStruct хороший выбор

OpenStruct объекты полезны, когда вам нужно что-то, чтобы соответствовать определенному интерфейсу вызова метода (т. е. отправить объект типа утка, отвечающий на #name а также #value), или когда вы хотите инкапсулировать детали реализации, но также хотите избежать чрезмерного проектирования решения. Они также создают потрясающий объект-заглушку, и я часто использую их вместо заглушек фреймворка, когда мне не нужны накладные расходы на заглушку / макет.

Другие вопросы по тегам