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

Casper のソリューションに加えて、instance_variables_fromジェムを使用することもできます。

instance_variables_from(opts)
于 2012-11-09T07:19:20.927 に答える
1

あなたはこれを行うことができます、

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

お役に立てれば!

于 2012-11-09T06:57:28.937 に答える