在 Ruby 2.1.5 和 2.2.4 中,创建一个新的 Collector 会返回正确的结果。
require 'ostruct'
module ResourceResponses
class Collector < OpenStruct
def initialize
super
@table = Hash.new {|h,k| h[k] = Response.new }
end
end
class Response
attr_reader :publish_formats, :publish_block, :blocks, :block_order
def initialize
@publish_formats = []
@blocks = {}
@block_order = []
end
end
end
> Collector.new
=> #<ResourceResponses::Collector>
Collector.new.responses
=> #<ResourceResponses::Response:0x007fb3f409ae98 @block_order=[], @blocks= {}, @publish_formats=[]>
当我升级到 Ruby 2.3.1 时,它开始返回 nil。
> Collector.new
=> #<ResourceResponses::Collector>
> Collector.new.responses
=> nil
我已经阅读了很多关于 OpenStruct 现在如何在 2.3 中快 10 倍的阅读,但我没有看到所做的更改会破坏收集器和响应之间的关系。非常感谢任何帮助。Rails 的版本为 4.2.7.1。