使用Ruby中的选项哈希快速设置实例变量?

时间:2012-11-09 06:48:01

标签: ruby

我想使用选项哈希作为Ruby中方法的输入,但是有没有办法快速设置所有同名变量(即具有相同名称)而不是单独设置每个变量?

所以不要做以下事情:

class Connection
  def initialize(opts={})
    @host     = opts[:host]
    @user     = opts[:user]
    @password = opts[:password]
    @project  = opts[:project]
    # ad nauseum...

是否有一个单行程序将散列中的每个传入选项分配给具有相同名称的变量?

4 个答案:

答案 0 :(得分:44)

def initialize(opts={})
  opts.each { |k,v| instance_variable_set("@#{k}", v) }
end

答案 1 :(得分:3)

这可以为您提供所需的信息:

def initialize(opts={})
  opts.each_pair do |key, value|
    send("#{key}=",value)
  end
end

答案 2 :(得分:1)

你可以用,

 @host, @user, @password, @project  = opts[:host], opts[:user], opts[:password], opts[:project]

希望这有帮助!

答案 3 :(得分:1)

除了Casper的解决方案,您还可以使用zucker gem:

instance_variables_from(opts)