【问题标题】:using hashes like objects in rails在rails中使用像对象一样的哈希
【发布时间】:2013-04-26 06:58:39
【问题描述】:

我想我曾经在 rails 项目中看到过一个不错的解决方案。我认为这个解决方案是在 Rails 中构建的。

我想要的是一个类似哈希的对象,它做这样的事情:

jar = Jar.new #no defined methods 'name' in it!

jar.name #returns nil
jar.name = 'fu'
jar.name #return 'fu'

name 可以是所有可能的东西,就像哈希一样。我不想预先定义它!

是否有一个辅助类可以在 rails 或类似的东西中执行此操作?

【问题讨论】:

    标签: ruby-on-rails ruby object helper


    【解决方案1】:

    您可以使用 Ruby 核心中的 OpenStruct:

    require 'ostruct'
    
    person = OpenStruct.new
    person.name    = "John Smith"
    person.age     = 70
    person.pension = 300
    
    puts person.name     # -> "John Smith"
    puts person.age      # -> 70
    puts person.address  # -> nil
    

    另外,看看documentation

    【讨论】:

    • 同样的答案,+1,即使在我的之后;)
    • 我以为它在 Ruby Std-lib 中。
    【解决方案2】:

    您可以使用 openstruct:

    require 'ostruct'
    => true 
    o = OpenStruct.new
    => #<OpenStruct>
    o.foo
    => nil 
    o.foo= 1
    => 1 
    o.foo
    => 1 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      相关资源
      最近更新 更多