動的に新しいローカル変数を定義する事はできません。
動的に変数を作りたいときは代替としてHashを用いるとおおよその場合、うまくいきます。
ruby
1values = ['one', 'two', 'three'].each.with_index(1).map{|key, val| [key, val] }.to_h
2
3p values # => {"one"=>1, "two"=>2, "three"=>3}
4p values["one"] # => 1
新しいローカル変数ではなく、事前に変数名が決まっているローカル変数の場合は
binding.local_variable_setが使えます。
ruby
1one = nil
2two = nil
3three= nil
4
5binding.local_variable_set(:one, 1)
6binding.local_variable_set(:two, 2)
7binding.local_variable_set(:three, 3)
8
9p [one,two,three] #=> [1, 2, 3]
追記
インスタンス変数ならば
ruby
1%w[one two three].each.with_index(1){|key, val|
2 instance_variable_set("@#{key}", val)
3}
でやれます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/08 12:44