我何时应该使用OpenStruct而不是Hash?

时间:2013-01-20 02:46:15

标签: ruby ruby-1.9.3 openstruct

我喜欢“任意属性的定义”,我认为ruby中的OpenStruct有时比使用哈希更清晰,但我很好奇是否有其他特定优势或用例使OpenStruct成为更好的选择而不仅仅是使用哈希。

2 个答案:

答案 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是一个不错的选择。