【发布时间】:2013-01-20 02:46:15
【问题描述】:
我喜欢“任意属性的定义”,我认为 ruby 中的 OpenStruct 有时感觉比使用哈希更干净,但我很好奇是否还有其他特定优势或用例使 OpenStruct 成为更好的选择而不是简单地使用哈希。
【问题讨论】:
-
操作系统速度较慢,但非常适合原型设计。
标签: ruby ruby-1.9.3 openstruct
我喜欢“任意属性的定义”,我认为 ruby 中的 OpenStruct 有时感觉比使用哈希更干净,但我很好奇是否还有其他特定优势或用例使 OpenStruct 成为更好的选择而不是简单地使用哈希。
【问题讨论】:
标签: ruby ruby-1.9.3 openstruct
OpenStruct 对象在您需要适合某个方法调用接口的东西(即发送响应#name 和#value 的鸭子类型对象),或者当您想要封装实现细节时很有用,但也要避免过度设计解决方案。它们还制作了一个很棒的存根对象,当我不需要存根/模拟的开销时,我经常使用它们代替框架存根。
【讨论】:
我认为这主要取决于性能决定。来自Ruby Documentation:
OpenStruct 利用 Ruby 的方法查找结构来查找和定义属性的必要方法。这是通过方法method_missing和define_method来完成的。
如果担心所创建对象的性能,则应考虑这一点,因为与使用 Hash 或 Struct 相比,设置这些属性的开销要大得多。
此外,Hash 之类的东西通过它提供的所有方法(has_key?、include? 等)具有附加功能。从这个角度来看,OpenStruct 是一个非常简单的对象,但是如果您从性能的角度来看没有任何顾虑,并且只想使用一个简单的对象,OpenStruct 是一个不错的选择。
【讨论】: