Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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