On 10/10/14 1:00 AM, Ali Çehreli wrote:
On 10/09/2014 08:06 PM, Joel wrote:
On Tuesday, 30 September 2014 at 17:27:09 UTC, Adam D. Ruppe wrote:
On Tuesday, 30 September 2014 at 17:22:44 UTC, Gary Willoughby wrote:
What is a sink delegate?
Instead of
string toString() { return "foo"; }
for example, you would use:
void toString(void delegate(string) sink) { sink("foo"); }
The sink argument there is then free to view and discard the data or
to make a private copy using whatever scheme it desires.
How do you use that toString? Maybe an example? Below is my failed
effort.
import std.stdio;
struct Try {
string name;
long age;
void toString(void delegate(string) sink) {
sink("foo");
}
}
void main() {
Try t = Try("Joel", 35);
writeln(t);
}
The signature of that toString is different from what I have been seeing
and using. The following works:
void toString(void delegate(const(char)[]) sink) const {
The delegate parameter is what is important. The function that is going
to be passed in takes a const(char)[], which actually should, but does
not, implicitly cast to a delegate(string) (see issue
https://issues.dlang.org/show_bug.cgi?id=3075).
The const outside is irrelevant to whether it will accept it or not,
that is a contract between the toString function and your object. If you
want a non-const toString, I think that should work.
(actually, testing it...) Yep, it works without the const on the outside.
-Steve