21

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

因此,不要执行以下操作:

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

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

4

4 回答 4

51
def initialize(opts={})
  opts.each { |k,v| instance_variable_set("@#{k}", v) }
end
于 2012-11-09T06:53:29.100 回答
4

这应该给你你正在寻找的东西:

def initialize(opts={})
  opts.each_pair do |key, value|
    send("#{key}=",value)
  end
end
于 2012-11-09T06:55:31.143 回答
1

你可以这样做,

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

希望这可以帮助!

于 2012-11-09T06:57:28.937 回答
1

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

instance_variables_from(opts)
于 2012-11-09T07:19:20.927 回答