2012-11-18 72 views
2

此代碼(由其他人)可能已經使用舊版本的Ruby編寫,因爲現在我收到一個錯誤,在字符串對象上調用'each'。下面的迷宮字符串被傳遞給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

在Ruby 1.9中使用each_line而不是each

但是看起來好像你可以用mazestring.split(/\n/)代替整個方法。

3

此代碼不必要地冗長。整個方法可以用map編寫,並使用1.9 String#lines而不是舊的1.8.x的String#each的分割線:

@maze = mazestring.lines.map(&:chomp) 
相關問題