问题描述
我是 Julia 的新手,并且遇到了一些我认为应该是常见情况的事情:
我想要一个迭代器,一次解析一个文本文件。所以,就像 eachline(f)
一样,除了函数 parse
应用于每一行。如果您愿意,可以调用结果 eachline(parse,f)
(例如带有额外函数参数的 open
版本):将 parse
映射到 eachline
。
更具体地说:我有一个函数 poset(s::String)
将一个偏序集的字符串表示转换为一个偏序集:
function poset(s::String)
nums = split(s)
...
return transitiveclosure(g)
end
现在我想说一些类似的话
open("posets7.txt") do f
for p in eachline(poset,f)
#something
end
end
(我特别需要它作为迭代器:我的文件相当大,所以我真的想一次解析它们)。
解决方法
我想我会(个人)在这种情况下使用 Iterators.map
:
open("posets7.txt") do f
for p in Iterators.map(poset,eachline(f))
# do something
end
end
但是,正如文档所述(以及您自己发现的),这等效于使用 generator expression:
open("posets7.txt") do f
for p in (poset(x) for x in eachline(f))
# do something
end
end