如何在 dlang 中传递 file.ByChunk?

How to pass file.ByChunk in dlang?

我是D的新手

我有以下代码:

auto file = File("test.txt", "r");
scope(exit) file.close();

foreach (letter; getTextKernel(file.byChunk(8192))) {
    writeln(letter);
}

我的 getTextKernel 看起来像:

string[] getTextKernel(InputRange!ubyte[] text) pure { ... }

我收到错误: getTextKernel (InputRange!ubyte[] 文本) 不可使用参数类型 (ByChunk) 调用

关于 byChunk 的文档:Returns an input range set up to read from the file handle a chunk at a time.

更新:整个程序

import std.stdio;

string[] getTextKernel(R)(R text) pure {
    return ["aa", "bbb", "ccc"];
}

void main() {
    writeln("Hello master dmitry!");

    auto file = File("test.txt", "r");
    scope(exit) file.close();

    // StubdGenetics genetic;
    foreach (letter; getTextKernel(file.byChunk(8192))) {
        writeln(letter);
    }
}

错误:纯函数'app.getTextKernel!(ByChunk).getTextKernel'无法调用不纯的析构函数'std.stdio.File.ByChunk.~this'

通常的方法是让 getTextKernel 接受模板参数。

string[] getTextKernel(R)(R text) pure   { ... }

因为范围在 D 中是惰性的,所以它们通常是自定义的一次性类型。 InputRange 在我的经验中几乎从未使用过。使用它是有原因的,但它速度较慢(使用运行时分派而不是编译时)并且通常不需要。