有人可以解释这里发生了什么吗?这是尝试在我的 rails 3.0.11、mongomapper 0.9.0 应用程序中设置哈希键的一些奇怪的简化示例。
class Foo
key :a, Hash
key :b, Hash
end
> foo = Foo.new( :a=>{:timezone=>"Adelaide"}, :b=>{:timezone=>"Azores"} )
> foo.a[:time] = Time.use_zone(foo.a[:timezone]){Time.zone.now}
=> Fri, 11 May 2012 20:20:36 AZOST +00:00
> foo.a[:time]
=> nil
当使用来自同一散列的时区时,它实际上并没有将散列键设置为返回值。但:
> foo.a[:time] = Time.use_zone(foo.b[:timezone]){Time.zone.now}
=> Sat, 12 May 2012 05:51:07 CST +09:30
> foo.a[:time]
=> Sat, 12 May 2012 05:51:07 CST +09:30
使用 b 哈希时区并存储该值。什么?我可以将 use_zone 块的返回值存储在局部变量中,然后设置散列键,或者为时区等使用静态字符串,但是当块使用散列本身的时区值时,我无法设置键?