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

mke*_*y33 27 ruby ruby-1.9.3 openstruct

我喜欢"任意属性的定义",我认为ruby中的OpenStruct有时比使用散列更清晰,但我很好奇是否有其他特定的优点或用例使OpenStruct成为比单纯使用更好的选择哈希.

Jim*_*lle 32

OpenStruct当你需要某些东西来适应某个方法调用接口时(即发送响应#name和的duck-typed对象#value),或者当你想要封装实现细节时,还希望避免过度设计解决方案时,对象很有用.它们还创建了一个非常棒的存根对象,当我不需要存根/模拟的开销时,我经常使用它们来代替框架存根.

  • +1提及他们在测试中的用途.在测试API/Web服务调用时,我广泛使用它们来存储与HTTP相关的数据位.一旦掌握了它就相当棒. (13认同)

Mar*_*ach 24

我认为这主要取决于绩效决策.来自Ruby文档:

OpenStruct利用Ruby的方法查找结构来查找和定义属性的必要方法.这是通过method_missing和define_method方法完成的.

如果对创建的对象的性能存在担忧,则应该考虑这一点,因为与使用Hash或Struct相比,这些属性的设置有更多的开销.

此外,像一个Hash与所有它提供的方法(附加功能has_key?,include?等等).OpenStruct从这个角度来看,这是一个非常简单的对象,但是如果从性能的角度来看没有任何问题并且想要一个易于使用的对象,那么这OpenStruct是一个不错的选择.