【发布时间】:2019-08-25 19:10:47
【问题描述】:
是否可以使用 Elixir 构建 Python 风格的递归生成器?像这样的:
def traverse(parent_dir):
dirs, files = get_dirs_and_files_as_lists(parent_dir)
for d in dirs:
yield from traverse(d)
for f in files:
yield f
对于所有要线性处理的文件,没有不定长度的急切列表所暗示的开销:
for f in traverse(dir):
process(f)
这或一些等效的工作应该可以使用流;不幸的是,我不知道怎么做。
我想要这样的东西,只是懒惰:
def traverse_eagerly(parent_dir) do
{dirs, files} = get_dirs_and_files_as_lists(parent_dir)
for x <- dirs do
traverse_eagerly(x)
end
|> Enum.concat()
|> Enum.concat(files)
end
【问题讨论】:
-
你的问题让我想回答“我如何遍历目录”,但这不是你问的:P 也许我会自己问......
标签: recursion stream elixir generator