2012-11-18 4 views
2

문자열 객체에서 'each'를 호출하는 중 오류가 발생하기 때문에이 코드 (다른 사람이 작성)는 이전 버전의 Ruby를 사용하여 작성되었을 수 있습니다. 아래의 미로 문자열은 maze_string_to_array 메소드로 전달됩니다. 이 실행할 때, 그것은 문제가 무엇인지`maze_string_to_array '각각 문자열 객체에 대해 호출

NoMethodError: undefined method `each' for #<String:0x00000100854ac0> 

당신이 설명 할 수있는이 오류를 산출하는 방법과 그것을 해결하기 위해?

def maze_string_to_array(mazestring) 
     @maze = [] 
     mazestring.each do |line|   
      @maze.push line.chomp 
     end 
    end 

미로 문자열

MAZE1 = %{##################################### 
# # #  #A  #  #  # 
# # # # # # ####### # ### # ####### # 
# # # # #   #  # #  # 
# ##### # ################# # ####### 
#  # #  # #  # # # # 
##### ##### ### ### # ### # # # # # # 
# #  # # # # B# # # # # # 
# # ##### ##### # # ### # # ####### # 
# #  # # # # # # # # #  # 
# ### ### # # # # ##### # # # ##### # 
# #  # #  #  #  # 
#####################################} 
+0

를? – akuhn

+0

나는 1.9.2를 사용하고있다 – BrainLikeADullPencil

+0

어쨌든'mazestring.split (/ \ n /)'으로 전체 메소드를 대체 할 수있을 것 같아. – akuhn

답변

2

루비 1.8 문자열 # 각 라인을 반복하는 데 사용됩니다. 1.9에서 String # each_line은 동일한 작업을 수행합니다.

2

루비 1.9에서는 each 대신 each_line을 사용합니다.

하지만 어쨌든 전체 방법을 mazestring.split(/\n/)으로 바꿀 수있는 것처럼 보입니다.

3

이 코드는 불필요하게 자세한 내용입니다. 전체 방법은 map 작성 및 선 분할 이전에 1.8.x String#each 대신 1.9 String#lines을 사용 할 수 있습니다 : 당신이 사용하는 루비 버전

@maze = mazestring.lines.map(&:chomp) 
관련 문제