我喜欢“任意属性的定义”,我认为ruby中的OpenStruct有时比使用哈希更清晰,但我很好奇是否有其他特定优势或用例使OpenStruct成为更好的选择而不仅仅是使用哈希。
答案 0 :(得分:30)
OpenStruct
和#name
的duck-typed对象)或者你想要的时候, #value
个对象很有用封装实现细节,但也希望避免过度设计解决方案。它们也创建了一个非常棒的存根对象,当我不需要存根/模拟的开销时,我经常使用它们来代替框架存根。
答案 1 :(得分:23)
我认为这主要取决于绩效决策。来自Ruby Documentation:
OpenStruct利用Ruby的方法查找结构来查找和定义属性的必要方法。这是通过method_missing和define_method方法完成的。
如果对创建的对象的性能存在顾虑,则应考虑这一点,因为与使用Hash或Struct相比,设置这些属性的开销要大得多。
此外,像Hash
这样的内容还具有其提供的所有方法(has_key?
,include?
等)的附加功能。从这个角度来看,OpenStruct
是一个非常简单的对象,但是如果从性能角度来看没有任何问题并且只想要一个简单的对象,OpenStruct
是一个不错的选择。