在 D 中,我可以通过以下方式“一次一大块”迭代文件:
foreach (ubyte[] block; chunks(myfile, 4096))
或
foreach (ubyte[] block; myfile.byChunk(4096))
我似乎找不到 documentation 中的任何重大差异。 是否有任何语义差异,或者只是语法?
最佳答案
浏览source你可以看到
myfile.byChunk
将有 struct
与范围属性(前面为空 popFront)
同时chunks
有一个带有 opApply
的结构(不是范围)
看起来 chunks
结构在直接的 foreach 中效率更高,因为它绕过了 File 的抽象,并且在 byChunk
时它将尝试在堆栈上分配缓冲区将始终在堆上分配,并且必须处理抽象层(它们都是非虚拟函数,因此可以内联,但仍然......),但具有作为实际范围的优点
关于D 中 byChunk() 和 chunks() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507217/