В приведенном ниже коде, что это за дополнительные null
в выводе, когда экземпляр S2
печатается с writeln
?
$ dmd -de -w so_004.d && ./so_004
S1("A", 1)
S2("A", 1, null)
Если я определю S2
в области действия пакета(т. е. вне функции main
) null
исчезает.
Скомпилировано с разумным недавним DMD:
$ dmd --version
DMD64 D Compiler v2.083.0
Copyright (C) 1999-2018 by The D Language Foundation, All Rights Reserved written by Walter Bright
Я заметил проблему, когда изучал opEquals
, и я 'Я не планирую определять типы в подобласти в «реальном» коде.
import std.stdio;
void main() {
{
struct S1 { string id; ushort x; }
auto a = S1("A", 1);
assert(a == a);
writeln(a);
}
{
struct S2 {
string id; ushort x;
bool opEquals()(auto ref const string rhs) const {
return id == rhs;
}
}
auto a = S2("A", 1);
assert(a == "A");
writeln(a);
}
}