【问题标题】:setting value of a hash key to return value of a function, rails 3 & mongomapper设置哈希键的值以返回函数的值,rails 3 & mongomapper
【发布时间】:2012-05-11 20:35:09
【问题描述】:

有人能解释一下这里发生了什么吗?这是一个非常简化的示例,说明尝试在我的 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 块的返回值存储在局部变量中,然后设置散列键,或者为时区等使用静态字符串,但是当块使用散列本身的时区值时,我无法设置键?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 mongomapper


    【解决方案1】:

    试试这个:

    foo = Foo.new( :a=>{:timezone=>"Adelaide"}, :b=>{:timezone=>"Azores"} )
    Time.use_zone(foo.a[:timezone]){
      foo.a[:time] = Time.zone.now
    }
    

    【讨论】:

    • 嗯。在 Time.use_zone 块中设置密钥确实有效。你能解释一下区别吗?为什么分配在一种情况下有效,而在另一种情况下无效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多