2014-10-22 2 views
-1

두 개의 배열을 사용하여 그 내용 중 하나의 문자열을 A[0] + B[0] + A[1] + B[1] ... 등의 형식으로 만드는 프로그램이 있습니다. 문제는 이것입니다 - 이상하게도, << 연산자는 A의 첫 번째 요소를 추가하기 위해 올바르게 작동하지만 이후에는 올바르게 작동하지 않는 것 같습니다. 정확히 말하면 :공백 문자가 아닌 문자열에 대해 정의되지 않은 메서드 '+ @'공백 문자가 아닌

complexKey = "#JohnSmith_" 
n = 0 

#isbns = [2,3] 
versions = [1,1] 

isbns.each do |isbn| 
complexKey << "#{versions[n]}_" 
n++ #an iterator is a crude tool, but I need it to deal with iterating through multiple arrays simultaneously 
complexKey << "#{isbn}_" 
end 

최종 결과는 "JohnSmith_1_2_1_3_"입니다. 그

'undefined method '[email protected]' for "JohnSmith_1_":String(noMethodError) 

나는이를 보았다, 일반적으로 연결 연산자 전에 충분한 공백을 가지고 있지 함께 할 것 같다,하지만 : 코드가 실행되면, 나는 오류가 발생 : 그러나 문제는이입니다 여기에있는 것처럼 보이지 않습니다. 어떤 아이디어?

+1

'+ @'는 + 1과 같이 숫자에 공통적으로 사용되는 단항 플러스입니다. 나는 당신이 제공 한 코드에서 그것을 어디에서 사용하고 있는지를 보지 못했다. 실제로이 방법으로 충돌 할 수없는 증가 만 볼 수있다. 게다가, 당신은'each_with_index'를 사용하고'n '으로 해커를 피할 수도 있습니다 : http://apidock.com/ruby/Enumerable/each_with_index –

+0

'versions.zip (isbns) .flatten.join ('_ ')'루프 대신에. – Stefan

+0

@matt'isbn'은 블록 변수로 할당됩니다. 그것은 정의되지 않은'isbns'입니다. – sawa

답변

2

루비에는 ++과 같은 것이 없습니다. 대신 n += 1을 사용하십시오.

이 코드로 :

n++ 
complexKey << "#{isbn}_" 

해석된다 - 따라서 오류 문자열에

n + +(comlexKey << "#{isbn}_") 

<< 연산자는 문자열을 반환합니다, 따라서 다음 단계는 'some_string'.send(:@+)에 해당 +'some_string'이다.

관련 문제