私がやりたいのは、変数に次のように動的に名前を付けることです。
def instance(instance)
@instance = instance #@instance isn't actually a variable called @instance, rather a variable called @whatever was passed as an argument
end
これどうやってするの?
を使用しinstance_variable_set
ます。
varname = '@foo'
value = 'bar'
self.instance_variable_set varname, value
@foo # => "bar"
または、発信者が「@」を入力する必要がない場合:
varname = 'foo'
value = 'bar'
self.instance_variable_set "@#{varname}", value
@foo # => "bar"
私が正しく理解している場合は、「instance_variable_set」を使用します。
class A
end
a = A.new
a.instance_variable_set("@whatever", "foo")
a.instance_variable_get("@whatever") #=> "foo"
あなたは本当にできません。
で遊ぶこともできますがeval
、実際には読みにくくなります。
正しいものを使用するif
か、代わりにハッシュを使用してください。
# With Hash:
values = {}
a = :foo
values[a] = "bar"
values[:foo] # => "bar"
# With if
calc = "bar"
if a_is_foo
foo = calc
else
oof = calc
end
foo # => "bar"