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# # # #   # #
# # ##### ##### # # ### # # ####### #
# #     # #   # # #   # # # #       #
# ### ### # # # # ##### # # # ##### #
#   #       #   #       #     #     #
#####################################}
4

3 回答 3

3

这段代码不必要地冗长。整个方法可以用 amap和 1.9 String#lines来代替旧的 1.8.x String#each来分割行:

@maze = mazestring.lines.map(&:chomp)
于 2012-11-18T00:19:42.513 回答
2

Ruby 1.8 String#each 用于遍历行。在 1.9 中,String#each_line 做同样的事情。

于 2012-11-18T00:17:32.847 回答
2

在 Ruby 1.9 中使用each_line而不是each.

但看起来你mazestring.split(/\n/)无论如何都可以替换整个方法。

于 2012-11-18T00:17:49.943 回答