我喜欢“任意属性定义”的概念,并认为在ruby中使用OpenStruct有时比使用哈希更加简洁,但我很好奇是否还有其他特定的优势或用例,使OpenStruct比仅使用哈希更好。
我喜欢“任意属性定义”的概念,并认为在ruby中使用OpenStruct有时比使用哈希更加简洁,但我很好奇是否还有其他特定的优势或用例,使OpenStruct比仅使用哈希更好。
OpenStruct
对象在需要符合特定方法调用接口(即发送一个响应 #name
和 #value
的鸭子类型对象)或者想要封装实现细节,但又不想过度设计解决方案时非常有用。 它们也是非常好的存根对象,在我不需要存根/模拟的开销时,我经常使用它们来代替框架存根。
我认为这主要是出于性能考虑。来自Ruby文档:
OpenStruct利用了Ruby的方法查找结构来查找和定义属性所需的方法。这是通过使用method_missing和define_method方法实现的。
如果担心创建的对象性能,这应该是一个考虑因素,因为与使用Hash或Struct相比,设置这些属性会有更多的开销。
另外,像Hash
这样的东西具有所有提供的方法(has_key?
、include?
等)。从这个角度来看,OpenStruct
是一个非常简单的对象,但如果您没有性能方面的顾虑,只想要一个易于使用的对象,那么使用OpenStruct
是一个不错的选择。