【发布时间】:2018-03-22 15:55:36
【问题描述】:
我希望在 Crystal 中实现 Python 的 os.walk 方法。我试图递归地执行它,但编译器被告知要小心递归产生,因为它会递归/无限地在编译时生成代码。这就是我所拥有的
def walk(d = @root, &block)
d = Dir.new(d) if d.is_a?(String)
dirs, files = d.entries.partition { |s| Dir.exists?(File.join(d.path, s)) }
if Dir.exists?(d.path)
yield d.path, dirs, files
dirs.each do |dir_name|
# recursively yield
walk File.join(d.path, dir_name), do |a, b, c|
yield a, b, c
end
end
end
end
【问题讨论】: