Подтвердить что ты не робот

Быстрая установка переменных экземпляра с хэш-настройками параметров в Ruby?

Я хочу использовать хэш-параметры в качестве входных данных для метода в Ruby, но есть ли способ быстро установить все одноименные переменные (например, имеющие одно и то же имя) вместо каждого из них отдельно?

Итак, вместо того, чтобы делать следующее:

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

есть ли один вкладыш, который будет присваивать каждой входящей опции в хэш переменной с тем же именем?

4b9b3361

Ответ 1

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

Ответ 2

Это должно дать вам то, что вы ищете:

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

Ответ 3

вы можете сделать это с помощью

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

надеюсь, что это поможет!

Ответ 4

Помимо решения Casper, вы также можете использовать zucker gem:

instance_variables_from(opts)