【问题标题】:Ruby object initialization: params, hash, vanilla?Ruby 对象初始化:参数、哈希、香草?
【发布时间】:2013-04-25 16:24:05
【问题描述】:

在初始化具有哈希类型结构的方法时,我对何时/为什么或者是否只是偏好问题感到困惑。

class Person1
    attr_reader :name, :age
    def initialize(params)
        @name = params[:name]
        @age  = params[:age]
    end
end
    me = Person1.new(name: 'John Doe', age: 27)
    puts me.name
    puts me.age
#----------------------------------------------
class Person2
   attr_reader :name, :age
   def initialize(name, age)
        @name = name
        @age = age
   end
end
    me = Person2.new('John Doe',  27)
    puts me.name
    puts me.age
#----------------------------------------------
class Person3
   attr_reader :person
   def initialize(name, age)
       @person = { name: name,
                    age: age }
   end
end
    me = Person3.new('John Doe',  27)
    puts me.person[:name]
    puts me.person[:age]

如果这是一个偏好问题,我喜欢只传递哈希,但如果您需要不同的 attr 读取器,哈希本身内的写入器,我可以看到这是一个问题。有经验法则吗?我看到很多使用 params 的 rails 文章。

【问题讨论】:

    标签: ruby hash hashmap params


    【解决方案1】:

    你的第三种方式很可能永远不会出现在野外——你已经在构造一个人对象,为什么它有一个person 的访问器?属性应该在类本身上。 1 和 2 之间的区别主要在于偏好,但当您经常只想设置特定属性时,第二个可能会有优势。

    关于 rails 对 params 的使用:params 是包含您正在处理的特定请求的请求参数的哈希值。当你在 Rails 中处理大量请求时,它会出现在每个控制器中,也可能出现在某些视图中。

    【讨论】:

    • 你已经在构造一个person对象,为什么它有一个person的访问器?否则您将如何获得这些值?我认为 params 是一个散列,而不是一个数组。在我 = Person1.new(name: 'John Doe', age: 27) 中,您为参数键分配了值......也许我应该阅读更多文档并回来。感谢您的快速回复
    • 就像前两个例子一样。第三种方式不直观且未使用,因为它是另一个级别的间接,根本不需要。是的,params 是一个哈希。
    猜你喜欢
    • 1970-01-01
    • 2012-03-20
    • 2010-10-19
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多