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

このコードは不必要に冗長です。メソッド全体は、行を分割する古い 1.8.x String#eachmapの代わりに1.9 String#linesを使用して記述できます。

@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.9each_lineでは、代わりにeach.

mazestring.split(/\n/)とにかく、メソッド全体を置き換えることができるように見えます。

于 2012-11-18T00:17:49.943 に答える