我是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
但是,正如文档所指出的(正如您自己所发现的(,这相当于使用生成器表达式:
open("posets7.txt") do f
for p in (poset(x) for x in eachline(f))
# do something
end
end