написание пользовательских методов с def - PullRequest
0 голосов
/ 04 декабря 2009

Предупреждение Ошибки новичка / новичка, содержащиеся в прочитанном на свой страх и риск!

Хорошо, пытаемся собрать код для чтения и печати текстового лабиринта. Это то, что я до сих пор:

def read_maze( filename )
local_maze = []
mz_file = File.open(filename,"r")

while ! mz_file.eof? do
line = mz_file.gets.chomp
local_maze = line.scan(/./)
end

mz_file.close
return local_maze
end
puts "done"

maze = read_maze("maze1.mz")

def print_maze( maze )
maze.each {|row|
puts row.join("")
 }
end
puts "made it too next step"
print_maze(maze)

вот мое представление файла maze1.mz, вызванное из другого файла

  ########
  #  F   #
  ####   #                          
  #  S   #                         
  ########           

Я получаю ошибки метода в своих пользовательских определениях, вот что подскажет netbeans

сделано быстрое примечание: я отредактировал ошибки C: \, чтобы не отображать структуру моего Directoy на жестком диске

C: \ test.rb: 21: в print_maze': undefined method join 'для "#": String (NoMethodError)

сделал тоже следующий шаг

C: \ test.rb: 20: in each' C:\test.rb:20:in print_maze ' C: \ test.rb: 25

Я смотрел на это около 2 часов и не смог решить # проблему, но irb не помогает

Ответы [ 4 ]

1 голос
/ 04 декабря 2009

Изменить строку

local_maze = line.scan(/./)

до

local_maze << line.scan(/./)

и вы распечатаете лабиринт. << добавляет элементы в массив.

1 голос
/ 04 декабря 2009

Как вы хотите вывод read_maze()?

Если вы хотите массив, содержащий каждый символ, вам нужно использовать local_maze.concat(line.scan(/./))

Если вам нужен массив массивов, каждый из которых содержит каждый символ в данной строке, вам нужно использовать local_maze << line.scan(/./)

По вашему print_maze() Полагаю, вам нужен последний, в таком случае попробуйте что-нибудь попроще, например:

def read_maze(filename)
  File.open(filename) do |f|
   f.collect { |line| line.chomp.scan(/./) }
  end
end

def print_maze(m)
 m.each { |row| puts row.join("") } 
end

maze = read_maze("maze1.mz")
print_maze(maze)
0 голосов
/ 04 декабря 2009

Вы также можете заменить line.chomp.scan(/./) на line.chomp.to_a - это более четко и эффективно

0 голосов
/ 04 декабря 2009

объединение работает с массивами, а не со строками

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...