2013-03-07 3 views
1

기본적으로 레일스 코드입니다 만, 여기서 순수 루비 문제입니다. 알다시피 - @ test.source는 ' ' (공백)을 포함 할 수있는 일부 문자열입니다. 목표는 처음부터 끝나는 불필요한 공백을 모두 삭제하는 것입니다. 예를 들어 %some word' '' '%some word' '으로, %another word' '' '' '%another word' '으로 남겨 두어야합니다.무한 루프 'while'루프

for i in [email protected] 
     if @test.source[i] == ' ' 
      i=i+1 
      while @test.source[i] == ' ' 
       @test.source[0...i].chop 
      end 
     else 
      i+=1 
     end 
    end 

어떤 이유로이 루프 (obviosly 'while')는 무한합니다. 왜?

+0

정규식은 대개 정규식으로 처리됩니다. 예를 들면 다음과 같습니다 :'@ test.source.gsub (/ \ s + /, '')' – AJcodez

+0

정규식은 강력한 도구 인 것 같습니다 –

+0

그러나 모든 줄 바꿈을 삭제합니다 고쳐? –

답변

1

while 루프 내에서 i이 증가하지 않으므로 while 루프는 계속 이동하지 않고 지정된 문자를 ' '과 항상 비교합니다.

이로 변경을 :

 <% while @test.source[i] == ' ' %> 
      <% @test.source[0...i].chop %> 
      <% i=i+1 %> 
     <% end %> 

...하지만 그렇다하더라도, 여전히 코드에 문제가 있습니다. 독자가 남은 문제를 볼 수있는 연습입니다. :)

+0

감사. 그거야. 하지만 나는 chop을 사용할 때 @ test.source [i]가 새로운 루프에서 previosly @ test.source [i-1]이되어서는 안된다. –

+0

['String # chop'] (http://www.ruby-doc.org/core-2.0/String.html#method-i-chop)은 원래 문자열을 수정하지 않습니다. 원한다면 ['String # chop!'] (http://www.ruby-doc.org/core-2.0/String.html#method-i-chop-21)을 사용할 필요가 있습니다. 그러나 다이가 말했듯이 그때조차도, 당신이 원하는 것을 성취 할 수있는 더 나은 (관용적 인) 방법이 있습니다. –