2017-11-22 12 views
0

Ruby에서 지역 변수를 설정할 수 있는지 알고 싶습니다 for 루프.for 루프의 Ruby 로컬 변수

는 더 정확하게 나는이처럼 행동하는 for 루프를 가지고 싶다 :

tmp = 0 
1.upto(5) { |i;tmp| puts i; tmp = i; } ; "tmp: #{tmp}" 

tmp 변수는 FOOR 루프 내에서 실행 무엇에 의해 수정할 수 없습니다.

+0

의견을 잘못 설명해 죄송합니다. –

+0

달성하려는 것은 무엇입니까? 루프 외부에서 변수를 변경하지 않으려면 변수를 변경하지 마십시오. 루프 내에서 할당의 포인트는 무엇입니까? –

+0

다른 프로그래밍 언어 에서처럼 공통 패턴을 유지하기 위해'for' 루프를 사용하고 싶습니다. 루프에서 지역 변수를 결정할 수있는 실질적인 이점이 될 것입니다. 이유는 무엇인지에 대한 논쟁이 필요하지 않습니다. –

답변

0

나는 가능하다고 생각하지 않는다. for 루프에는 자체 범위가 없다.

1

당신은 외부 변수

tmp = 0 
for i in (1..5) do 
    proc do |;tmp| 
    puts i 
    tmp = i 
    end[] 
end 

이 끔찍 마스킹을위한 새로운 블록을 도입 할 수 있습니다. foreach의 차이점은 for 루프 의 반복 변수가 외부 범위을 오염 시킨다는 것입니다.

x = [] 
# i has same scope as x 
for i in (1..3) 
    # closure captures i outside the loop scope, so... 
    x << lambda { i } 
end 
# WAT 
x.map(&:call) # [3, 3, 3] 

x = [] 
(1..3).each { |i| x << lambda { i } } 
# sanity restored 
x.map(&:call) # [1, 2, 3] 

each처럼 for 행위를 만들기 위해 위의 내 해킹을 사용하면 이미 혼란 행동이 훨씬 더 복잡합니다. for을 완전히 피하는 것이 좋습니다.

+0

감사합니다. @Max, 'proc'의 예가 제 질문에 대한 답변입니다. 나는 그것이 볼 좋은 구조가 아니라는 것에 동의한다. 다른면에서 'for'는 컴퓨터 프로그래밍에서 가장 많이 쓰여진 단어입니다 ('if'와 함께). Ruby에서 사업을 그만두는 것이 유감입니다. –

+0

@NicolaMingotti 루비를 사용하면서 수년간 한 번씩 'for' 루프를 작성하지 않았습니다. 나는 사람들이 다른 언어에서 왔을 때 사람들이 괴롭히지 않도록 단지 거기에 있다고 확신합니다. – Max