在字符串对象上调用每个

时间:2012-11-18 00:10:29

标签: ruby

这段代码(由其他人编写)可能是使用旧版本的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# # # #   # #
# # ##### ##### # # ### # # ####### #
# #     # #   # # #   # # # #       #
# ### ### # # # # ##### # # # ##### #
#   #       #   #       #     #     #
#####################################}

3 个答案:

答案 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/)代替整个方法。