Ruby对象初始化:params,hash,vanilla?

时间:2013-04-25 16:24:06

标签: ruby hash hashmap params

在初始化具有散列类型结构的方法时,我遇到了关于何时/为什么或者是否只是偏好的问题。

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文章。

1 个答案:

答案 0 :(得分:1)

你的第三种方式很可能永远不会出现在野外 - 你已经构建了一个人物对象,为什么它有一个person的存取器?属性应该在类本身上。 1和2之间的差异主要是偏好,但是当您经常想要仅设置特定属性时,第二个可能是有利的。

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