一般来说,与结构相比,使用OpenStruct的优点和缺点是什么?哪种类型的通用用例适合这些用例?
发布于 2009-07-24 13:43:31
使用OpenStruct
,您可以任意创建属性。另一方面,在创建Struct
时,必须定义它的属性。选择一个而不是另一个应该主要基于您是否需要能够在以后添加属性。
考虑它们的方式是作为散列和类之间的中间地带。与Hash
相比,它们暗示了数据之间更具体的关系,但它们没有类那样的实例方法。例如,一个函数的一堆选项在散列中是有意义的;它们只是松散相关。函数所需的姓名、电子邮件和电话号码可以打包在一个Struct
或OpenStruct
中。如果姓名、电子邮件和电话号码需要以"First Last“和"Last,First”格式提供姓名,那么您应该创建一个类来处理它。
发布于 2010-11-10 03:56:55
与结构相比,OpenStructs使用的内存明显更多,而且执行速度更慢。
require 'ostruct'
collection = (1..100000).collect do |index|
OpenStruct.new(:name => "User", :age => 21)
end
在我的系统上,以下代码在14秒内执行,消耗1.5 GB内存。您的里程可能会有所不同:
User = Struct.new(:name, :age)
collection = (1..100000).collect do |index|
User.new("User",21)
end
这几乎是瞬间完成的,并消耗了26.6MB的内存。
发布于 2017-05-23 04:42:33
Struct
>> s = Struct.new(:a, :b).new(1, 2)
=> #<struct a=1, b=2>
>> s.a
=> 1
>> s.b
=> 2
>> s.c
NoMethodError: undefined method `c` for #<struct a=1, b=2>
OpenStruct
>> require 'ostruct'
=> true
>> os = OpenStruct.new(a: 1, b: 2)
=> #<OpenStruct a=1, b=2>
>> os.a
=> 1
>> os.b
=> 2
>> os.c
=> nil
https://stackoverflow.com/questions/1177594
复制相似问题