21

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

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

しかし、なぜ2行目が必要なのか完全には理解していません。私の場合、次のようなものを使用します

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

2 に答える 2

34

使用instance_variable_setrubydoc

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 
于 2010-03-27T17:27:19.750 に答える
2

インスタンス変数は、次の方法で取得できます。

input = instance_variable_get("@one")

この後、あなたの場合はinput「21」に等しくなります。

于 2010-03-27T17:07:08.103 に答える