用def编写自定义方法

时间:2009-12-04 00:54:21

标签: ruby

警告新手中包含的新手/新手错误需自担风险!

好的,试着整理一些代码来阅读和打印基于文本的迷宫文件。这就是我到目前为止所做的:

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

我在我的自定义defs中遇到方法错误,这是netbeans吐回来的

完成 快速说明:我编辑了我的C:\ errors,没有在硬盘上列出我的directoy结构

C:\ test.rb:21:in print_maze': undefined method join'for“#”:String(NoMethodError)

太下一步了

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

我一直在看这个约2个小时并且无法解决#问题irb没有帮助

4 个答案:

答案 0 :(得分:1)

更改行

local_maze = line.scan(/./)

local_maze << line.scan(/./)

你将打印出迷宫。 <<将项添加到数组中。

答案 1 :(得分:1)

您想要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)

答案 2 :(得分:0)

join适用于数组,不适用于字符串

答案 3 :(得分:0)

您也可以将line.chomp.scan(/./)替换为line.chomp.to_a - 它更清晰有效