Rubyで変数の値を別の変数名として使用する 質問する

Rubyで変数の値を別の変数名として使用する 質問する

私はRubyの勉強を始めたばかりで、いくつかの数値を生成し、それを@one、@two、@threeなどの変数に割り当てるプログラムを書きました。ユーザーは、変数の名前(例:one)を入力して、変更する変数を指定できます。次に、「@[valueofinout] = asd」のような操作を行う必要があります。これをどのように行うのでしょうか。また、私が考えている方法は推奨されていないようですが、もっと良い方法はありますか?私は次の方法を見つけました。

x = "myvar"
myvar = "hi"
eval(x) -> "hi"

しかし、なぜ2行目が必要なのかよく分かりません。私の場合は、次のようなものを使うのでしょうか?

@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto

ベストアンサー1

使用instance_variable_setルビードキュメント

instance_variable_set("@" + varname, value)

しかし、ほとんどの場合、通常のRuby変数とユーザーが操作する変数を分離する必要があります。ユーザー変数のハッシュを作成するのはどうでしょうか。例:

@uservars = { 'one' => 1, 'two' => 2 }
two = @uservars['two']   # Look up 'two' variable

varname = "myvar"
@uservars[varname] = 5   # Set a variable by name
value = @uservars[varname]  # Get a variable by name 

おすすめ記事