这段代码(由其他人编写)可能是使用旧版本的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 :(得分:3)
此代码不必要地冗长。整个方法可以使用map
编写并使用1.9 String#lines而不是旧的1.8.x String#each来分割行:
@maze = mazestring.lines.map(&:chomp)
答案 1 :(得分:2)
Ruby 1.8 String#每个用于遍历行。在1.9中,String#each_line做同样的事情。
答案 2 :(得分:2)
在Ruby 1.9中使用each_line
而不是each
。
但看起来好像你可以用mazestring.split(/\n/)
代替整个方法。