2012-05-05 2 views
-1

내가하고 싶은 것은 이름 변수가 동적 같다 :이름 인스턴스 변수 동적으로 루비

def instance(instance) 
    @instance = instance #@instance isn't actually a variable called @instance, rather a variable called @whatever was passed as an argument 
end 

내가 어떻게 할 수 있습니까?

+0

[루비에서 동적으로 설정 지역 변수] (의 중복 가능성 http://stackoverflow.com/questions/4963678/dynamic-set-local-variables-in-ruby) – coreyward

답변

0

정말 할 수 없습니다.

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" 
+0

어떻게? 정확히 무슨 뜻이야? –

+0

그는 다음을 의미합니다 :'var = : a; hash = {var => 'foo'}; 해시 [var] = '막대'; hash [var];' – d11wtq

+0

나는 이것을 위해'eval'을 사용하지 않을 것입니다. 그것은 설계 결함이고 평가는 잘못된 손에서 위험합니다;) – d11wtq

2

나는 당신이 "instance_variable_set"를 사용하려면 제대로 이해하고 :

class A 
end 

a = A.new 
a.instance_variable_set("@whatever", "foo") 

a.instance_variable_get("@whatever") #=> "foo" 
5

사용 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" 
관련 문제