std.algorithm.copy和std.digest

Tam*_*mas 5 d copy range digest

当我std.algorithm.copystd.digest对象上使用时,与put逐字节使用时相比,我获得了不同的结果.为什么?

import std.stdio;
import std.digest.digest;
import std.digest.md;
import std.algorithm;

void main() {
    string s = "Hello!\n";
    auto d1 = makeDigest!MD5;
    auto d2 = makeDigest!MD5;
    foreach (ubyte b; s) {
        d1.put(b);
    }
    s.copy(d2);
    writeln(digest!MD5(s).toHexString);
    writeln(d1.finish().toHexString);
    writeln(d2.finish().toHexString);
}
Run Code Online (Sandbox Code Playgroud)

输出:

E134CED312B3511D88943D57CCD70C83
E134CED312B3511D88943D57CCD70C83
D41D8CD98F00B204E9800998ECF8427E
Run Code Online (Sandbox Code Playgroud)

Ada*_*ppe 4

d2 按值传递进行复制。数据在函数内部被复制,但是当它返回时,d2外部的变量没有被修改!

我有点认为这可能是一个错误:当前的行为对我来说没有多大意义。当你复制它时,通过引用来做是有意义的。单元测试仅测试半引用数组(它们是指针)并且它适用于它们。

  • 作为解决方法,您可以使用 MD5Digest(这是一个类)而不是 MD5(这是一个结构)。 (2认同)