2015-01-16 3 views
3

배열을 반복하여 여러 변수를 만들 수 있습니까? 예를 들어배열을 반복하여 루비에서 변수를 만들 수 있습니다.

, 나는 배열 numbers = [1,2,3,4,5]라고 한 말을 내가, number_1라는 변수 number_2의 시리즈를 만들 ... number_5 (숫자 배열의 해당 인덱스에 각각 동일한 예를 들어 number_1 = 1, number_2 = 2 등 원).

나는 다음의 라인을 따라 뭔가 시도 :

numbers.each_with_index do |num, index| 
    number_"#{index+1}" = num 
end 

을하지만 실패했습니다.

필자는 본질적으로 변수 작성 및 값 지정을 자동화하는 반복 프로세스를 원합니다.

감사합니다.

+1

왜이 작업을 수행 하시겠습니까? 'number_1'은'numbers [0]'이하지 않는 것을 무엇입니까? – ptd

+0

이것은 아마도 귀하의 요구를 충족시킬 것입니다 : http://stackoverflow.com/q/16419767/2177 – yalestar

+0

감사합니다. @yalestar, 도움이됩니다. –

답변

2

한 가지 방법은 다음과 같습니다

또 다른 방법은 인스턴스 변수 만들기 위해 eval 방법을 사용
instance_variable_set("@number_#{index+1}", num) 

: eval 조금 해키 간주됩니다

eval "@number_#{index+1} = #{num}" 

머리를, 그리고 작동하지 않습니다 JRuby에.

(경고 : 위의 코드는 범위 변수 (일명 지역 변수)가 아닌 인스턴스 변수를 만듭니다. 예 : 코드는 이 아닌 number_1을 만듭니다. Ruby는 동적으로 직접적인 방법을 제공하지 않습니다. 계속 유지되는 스코프 수준 변수를 만들고 eval 내에 범위를 만들 수 있지만 범위가 eval을 벗어납니다.

+1

이것은 (요청 된 것처럼) 로컬 변수를 생성하지 않는다는 것에주의하십시오. 이 방법으로 로컬 변수를 만들 수있는 방법은 없습니다. – ptd

+0

@ptd 좋은 지적, 나는 그것을 추가 할 것이다. – joelparkerhenderson

+0

@ptd 감사합니다. 그것은 분명히 분명합니다. –

관련 문제