I am about to write my own stupid and simple http client .. and i have added a callback function that has the received content as a parameter.

class AsyncHttpGet
{
this(string host, ushort port, string path, void delegate(string) callback )
    { ... }
}

My first attempt was to write:

auto f = new AsyncHttpGet("www.dprogramming.com", 80, "/index.php", (string content) => {
  ...
});

but this is does not work because my AsyncHttpGet takes a normal delegate and this => seems to add nothrow @nogc @safe to my delegate type.

The correct syntax is only marginally differnt, but took me quite a while to figure out:
( the missing arrow )

auto f = new AsyncHttpGet("www.dprogramming.com", 80, "/index.php", (string content)
{
 ... // this is of type function
});

i noticed that delegates are "more powerful" than functions. once the passed function e.g. needs to capture a value from the outside it becomes a delegate type. I have also read that a delegate can contain a reference to a class method bound to an instance.

int dummy = 0;
auto f = new AsyncHttpGet("www.dprogramming.com", 80, "/index.php", (string content)
{
 dummy = 1; // this is of type delegate
});

but what is the difference between a lambda (=>) and a functions/delegates? i think this is a major pitfall for newcomers, and should be adressed somehow.

Reply via email to