Ruby에서 지역 변수를 설정할 수 있는지 알고 싶습니다 for
루프.for 루프의 Ruby 로컬 변수
는 더 정확하게 나는이처럼 행동하는 for
루프를 가지고 싶다 :
tmp = 0
1.upto(5) { |i;tmp| puts i; tmp = i; } ; "tmp: #{tmp}"
tmp
변수는 FOOR 루프 내에서 실행 무엇에 의해 수정할 수 없습니다.
Ruby에서 지역 변수를 설정할 수 있는지 알고 싶습니다 for
루프.for 루프의 Ruby 로컬 변수
는 더 정확하게 나는이처럼 행동하는 for
루프를 가지고 싶다 :
tmp = 0
1.upto(5) { |i;tmp| puts i; tmp = i; } ; "tmp: #{tmp}"
tmp
변수는 FOOR 루프 내에서 실행 무엇에 의해 수정할 수 없습니다.
나는 가능하다고 생각하지 않는다. for
루프에는 자체 범위가 없다.
당신은 외부 변수
tmp = 0
for i in (1..5) do
proc do |;tmp|
puts i
tmp = i
end[]
end
이 끔찍 마스킹을위한 새로운 블록을 도입 할 수 있습니다. for
과 each
의 차이점은 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
을 완전히 피하는 것이 좋습니다.
감사합니다. @Max, 'proc'의 예가 제 질문에 대한 답변입니다. 나는 그것이 볼 좋은 구조가 아니라는 것에 동의한다. 다른면에서 'for'는 컴퓨터 프로그래밍에서 가장 많이 쓰여진 단어입니다 ('if'와 함께). Ruby에서 사업을 그만두는 것이 유감입니다. –
@NicolaMingotti 루비를 사용하면서 수년간 한 번씩 'for' 루프를 작성하지 않았습니다. 나는 사람들이 다른 언어에서 왔을 때 사람들이 괴롭히지 않도록 단지 거기에 있다고 확신합니다. – Max
의견을 잘못 설명해 죄송합니다. –
달성하려는 것은 무엇입니까? 루프 외부에서 변수를 변경하지 않으려면 변수를 변경하지 마십시오. 루프 내에서 할당의 포인트는 무엇입니까? –
다른 프로그래밍 언어 에서처럼 공통 패턴을 유지하기 위해'for' 루프를 사용하고 싶습니다. 루프에서 지역 변수를 결정할 수있는 실질적인 이점이 될 것입니다. 이유는 무엇인지에 대한 논쟁이 필요하지 않습니다. –