0

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

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

4

1 回答 1

1

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

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

于 2013-04-25T16:29:05.323 回答