文字列の値を使用してハッシュを参照する方法-つまり
#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
"#{bar}"["key"] = "value"
結果は
foo:5:in `[]=': string not matched (IndexError)
from foo:5
bar (foo) の値を使用して foo という名前のハッシュを参照するにはどうすればよいですか? ありがとう!
文字列の値を使用してハッシュを参照する方法-つまり
#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
"#{bar}"["key"] = "value"
結果は
foo:5:in `[]=': string not matched (IndexError)
from foo:5
bar (foo) の値を使用して foo という名前のハッシュを参照するにはどうすればよいですか? ありがとう!
#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
instance_eval(bar)["key"]="value"
このコンテキストでeval(bar)
も機能します
instance_eval は、現在のコンテキストで最初の引数に指定した文字列を (ruby コードとして) 実行しようとします。
あなたの例では、Ruby は String#[]= メソッドを呼び出そうとしています。そして、あなたはそれを望んでいません:)
それが役立つことを願っています。
次のように文字列を評価できます:-
foo = Hash.new
bar = "foo"
eval "#{bar}[\"key\"]=\"value\""
puts foo # {"key"=>"value"}
覚えておいてください、eval は悪ですが、動作します:
>> foo = Hash.new
{}
>> bar = "foo"
=> "foo"
>> eval(bar)["key"] = "value"
=> "value"
>> foo
=> {"key"=>"value"}