如何在dlang中传递file.ByChunk?

时间:2017-06-02 17:22:00

标签: d dmd

我是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 [] text)不能使用参数类型调用(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'无法调用不纯的析构函数&st; std.stile.Fy.ByChunk .~这个'

1 个答案:

答案 0 :(得分:1)

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

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

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