2013-05-05 5 views
0

출력의 끝에서 항상 "정의되지 않은 메소드`%를 얻는 것으로 기대하는 모든 것을하는이 간단한 코드 블록을 작성했습니다. 'for nil : NilClass (NoMethodError)'입니다. 어떻게/왜 이런 일이 생기고 어떻게 해결할 수 있습니까? range정의되지 않은 메소드 '%'for nil : NilClass (NoMethodError)

def fizzblam 

range =* (1..100) 
range.each do |i| 
if range[i] % 7 == 0 && range[i] % 5 == 0 
puts "fizzblam" 
elsif range[i] % 7 == 0 && range[i] % 5 != 0 
puts "blam" 
elsif range[i] % 7 != 0 && range[i] % 5 == 0 
puts "fizz" 
else puts range[i] 
end 
end 
end 

fizzblam 

답변

2

요소는 1 내지 100이지만 range로 인덱스는 each있어서 이미에게 배열의 요소가 아닌 인덱스를 제공 0에서 99 사이에있다 - 다만 대신 루프 체내 i를 사용을 range[i]

a.fetch(i) 대신 a[i]으로 배열 a를 색인 한 경우 좀더 합리적인 오류를받은 것

- 후자는 nil을 제공하면서 전자는 IndexError가 발생합니다.

+0

친절하게 감사드립니다! 나는 그것이 색인으로 무엇인가 가지고 있다고 생각했다. 많이 감사드립니다! –

+0

Array []가 아닌 fetch 호출에 대한 추가 정보. – vgoff

관련 문제