class Foo
  attr_accessor :name, :age, :email, :gender, :height
  def initalize params
    @name = params[:name]
    @age = params[:age]
    @email = params[:email]
    .
    .
    .
  end这似乎是一种愚蠢的做法。在Ruby中初始化对象的更好/更习惯的方式是什么?
Ruby 1.9.3
发布于 2015-04-15 05:59:33
为了利用Joshua Cheek的答案进行一些概括
module Initializable
  def initialize(params = {})
    params.each do |key, value|
      setter = "#{key}="
      send(setter, value) if respond_to?(setter.to_sym, false)
    end
  end
end
class Foo
  include Initializable
  attr_accessor :name, :age, :email, :gender, :height
end
Foo.new name: 'Josh', age: 456
=> #<Foo:0x007fdeac02ecb0 @name="Josh", @age=456>NB如果已经使用了初始化混合,并且我们需要自定义初始化,我们只需调用:
class Foo
  include Initializable
  attr_accessor :name, :age, :email, :gender, :height, :handler
  def initialize(*)
    super
    self.handler = "#{self.name} #{self.age}"
  end
end
Foo.new name: 'Josh', age: 45
=> #<Foo:0x007fe94c0446f0 @name="Josh", @age=45, @handler="Josh 45"> https://stackoverflow.com/questions/12763016
复制相似问题