解析文件中每一行的 Julia 迭代器

问题描述

我是 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