哇。我从没见过有人尝试过。不,那是行不通的。toString
就像任何其他返回 a 的函数一样string
。除了一些库函数(例如format
and writeln
)知道调用它以便将对象转换为string
. 所以,如果你这样做,你会得到完全相同的行为
string convToString(Foo foo)
{
auto a = to!string(foo.a);
auto b = to!string(foo.b);
return "%s / %s", a, b;
}
然后做了
writeln(convToString(foo));
但是在这里咬你的是逗号运算符。当它运行时,
return "%s / %s", a, b;
将成为
return "%s / %s", "1", "2";
逗号运算符的结果是它的最后一个参数,因此"2"
返回。并且由于没有副作用"%s / %s"
,"1"
它们几乎毫无意义。在这一点上,你还不如刚刚写
return b;
而不是
return "%s / %s", a, b;
您要做的是使用std.string.format
. 并将您的toString
功能更改为
override string toString()
{
return format("%s / %s", a, b);
}
format
然后将创建string
您想要的。
附带说明一下,将局部变量命名为与示例中的成员变量相同的名称几乎只是在询问错误,因为此时很容易混淆局部变量和成员变量。