我是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 .~这个'
答案 0 :(得分:1)
通常的做法是让getTextKernel
接受模板参数。
string[] getTextKernel(R)(R text) pure { ... }
因为D中的范围是懒惰的,所以它们通常是自定义的,一次性的类型。 InputRange
几乎从未用于我的经验。有理由使用它,但速度较慢(使用运行时调度而不是编译时),通常不需要。