![]() |
1
1
你的“文件”对象是什么?打开文件的句柄,或者可以依次打开的文件系统路径的表示? 一次打开所有文件通常是一个坏主意——毕竟,使用迭代器的一部分目的是一次只访问一个对象。迭代器可以一次生成一个打开的文件,并让调用者负责关闭它,尽管这可能有点奇怪。
老实说,您的需求并不清楚——根据我的经验,大多数生成一系列文件的迭代器都使用类似
你想知道什么并不明显,感觉你想问一个一般性的问题,但是你没有提供足够的信息让我们给你建议。就像问,“我想用字符串还是整数?”没有任何上下文。
编辑:我可能会推
全部的
把这个逻辑转化为
|
![]() |
2
1
您的迭代器应该做什么?将数据写入文件?创建它们? 迭代器是 迭代 通过数据,这意味着 提供 顺序数据以一致的方式,而不是 突变 他们。 |
![]() |
3
1
我觉得这个问题不清楚。 我们说的是迭代器还是工厂? 对我来说,迭代器正在对预先存在的 东西 并允许调用者处理每个 事情 反过来。 当您说“spits out”时,您的意思是允许客户机使用一组预先存在的文件中的一个文件,还是说您正在迭代一些数据,并打算将这些数据存储在要生成的文件中。如果我们正在生成,那么我们就有了一个文件工厂。 我猜你打算在文件系统中处理一些文件。我认为您的迭代器类似于一个目录,它可以为您提供它知道的下一个文件。所以我通过传递足够的数据来构造“driectory”,让它知道您的意思是什么文件(可能只是一个操作系统路径,可能是某种“查找”表达式,一个类似于ftp的引用列表等),并期望它在我迭代时给我下一个文件。 ——问题澄清后更新 我认为这里的关键问题是什么时候应该打开单个文件。迭代器本身将合理地返回与打开的文件句柄相对应的文件对象,然后调用方就可以处理该文件。但实际上,迭代器应该针对 列表 预先打开的文件或 列表 对于文件引用,使用作为迭代器next()打开的文件。 我认为我们应该做后者,因为有一个打开的文件会有开销,因此我们应该只在需要的时候打开这些文件。 这又引出了另一个问题:谁关闭了文件?我们负担不起把它们全部打开。也许迭代器应该在调用next()时关闭每个文件。这意味着迭代器本身需要一个close()方法来清理当前打开的文件。另外,我们需要明确地记录客户的责任是结案。 |
![]() |
4
0
这取决于你需要什么。例如,您可以有:
您可以设计一个底层类,例如
|
|
Julia · 矢量中相加为总和S的值的数量 1 年前 |
![]() |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
![]() |
Pratik · 不使用Java DeepCopy迭代器 6 年前 |
![]() |
PanDe · 将两个列表合并为一个Dict、Tuple 6 年前 |
![]() |
bisarch · 迭代哈希集并在每次迭代中删除多个元素 6 年前 |