| Thread overview | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
December 02, 2008 Delegate | ||||
|---|---|---|---|---|
| ||||
Attachments: | Hi
I have a problem:
What's wrong about this code?
Code:
import std.stdio;
int main() {
writefln("%f", add(100, 786, 56.0));
return 0;
}
double add(double delegate()[] dgs...) {
double result = 0;
foreach(double delegate() dg; dgs) {
result += dg;
}
return result;
}
Or a better question is: How can I get the value out of the delegate?
Greetings Fabian Claßen
PS: I am a beginner :P
| |||
December 02, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Fabian Claßen | On Tue, Dec 2, 2008 at 1:30 PM, Fabian Claßen <admin@fabs-world.de> wrote:
> result += dg;
Just change that line to "result += dg();". A delegate is like a function; you call it to get the value.
| |||
December 02, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley Attachments: | Jarrett Billingsley schrieb:
> On Tue, Dec 2, 2008 at 1:30 PM, Fabian Claßen <admin@fabs-world.de> wrote:
>> result += dg;
>
> Just change that line to "result += dg();". A delegate is like a function; you call it to get the value.
Oh thank you.
I see. That's a stupid mistake of mine :D
But I love D.
| |||
December 02, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Fabian Claßen | On Tue, 02 Dec 2008 19:30:47 +0100, Fabian Claßen wrote: > Hi > I have a problem: > > What's wrong about this code? > Code: > > import std.stdio; > > int main() { > writefln("%f", add(100, 786, 56.0)); > return 0; > } > > double add(double delegate()[] dgs...) { > double result = 0; > foreach(double delegate() dg; dgs) { > result += dg; > } > return result; > } > > Or a better question is: How can I get the value out of the delegate? I don't understand your code, sorry. It seems to me that the argument you supplied to add() is a list of doubles and not a list of delegates. -- Derek Parnell Melbourne, Australia skype: derek.j.parnell | |||
December 02, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Derek Parnell | On Tue, 02 Dec 2008 22:45:03 +0300, Derek Parnell <derek@psych.ward> wrote:
> On Tue, 02 Dec 2008 19:30:47 +0100, Fabian Claßen wrote:
>
>> Hi
>> I have a problem:
>>
>> What's wrong about this code?
>> Code:
>>
>> import std.stdio;
>>
>> int main() {
>> writefln("%f", add(100, 786, 56.0));
>> return 0;
>> }
>>
>> double add(double delegate()[] dgs...) {
>> double result = 0;
>> foreach(double delegate() dg; dgs) {
>> result += dg;
>> }
>> return result;
>> }
>>
>> Or a better question is: How can I get the value out of the delegate?
>
> I don't understand your code, sorry. It seems to me that the argument you
> supplied to add() is a list of doubles and not a list of delegates.
>
>
I was a bit surprized at first, too, but any value is indeed a lazy delegate that returns itself.
| |||
December 02, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Derek Parnell | On Tue, Dec 2, 2008 at 2:45 PM, Derek Parnell <derek@psych.ward> wrote:
> On Tue, 02 Dec 2008 19:30:47 +0100, Fabian Claßen wrote:
>
>> Hi
>> I have a problem:
>>
>> What's wrong about this code?
>> Code:
>>
>> import std.stdio;
>>
>> int main() {
>> writefln("%f", add(100, 786, 56.0));
>> return 0;
>> }
>>
>> double add(double delegate()[] dgs...) {
>> double result = 0;
>> foreach(double delegate() dg; dgs) {
>> result += dg;
>> }
>> return result;
>> }
>>
>> Or a better question is: How can I get the value out of the delegate?
>
> I don't understand your code, sorry. It seems to me that the argument you supplied to add() is a list of doubles and not a list of delegates.
It's legal. If you have a typesafe variadic array of delegates, you can call the function as if it took a bunch of lazy parameters.
| |||
December 02, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley Attachments: | Jarrett Billingsley schrieb:
> On Tue, Dec 2, 2008 at 2:45 PM, Derek Parnell <derek@psych.ward> wrote:
>> On Tue, 02 Dec 2008 19:30:47 +0100, Fabian Claßen wrote:
>>
>>> Hi
>>> I have a problem:
>>>
>>> What's wrong about this code?
>>> Code:
>>>
>>> import std.stdio;
>>>
>>> int main() {
>>> writefln("%f", add(100, 786, 56.0));
>>> return 0;
>>> }
>>>
>>> double add(double delegate()[] dgs...) {
>>> double result = 0;
>>> foreach(double delegate() dg; dgs) {
>>> result += dg;
>>> }
>>> return result;
>>> }
>>>
>>> Or a better question is: How can I get the value out of the delegate?
>> I don't understand your code, sorry. It seems to me that the argument you supplied to add() is a list of doubles and not a list of delegates.
>
> It's legal. If you have a typesafe variadic array of delegates, you can call the function as if it took a bunch of lazy parameters.
I am learning D. But ...
I worked with other programming languages before and so I learn D with a
book for experienced programmers. My learning concept is like:
reading ... memorizing ... coding
So there was a very similar code in the book and I tried to write this
code by heart.
That's only for your information why I've writen the code like this.
The function gets a list of lazy arguments and summarizes the arguments.
Greetings Fabian Claßen
PS: Sorry I believe my english is bad - I am German :D lol
| |||
December 02, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Denis Koroskin | On Tue, 02 Dec 2008 22:53:25 +0300, Denis Koroskin wrote: > On Tue, 02 Dec 2008 22:45:03 +0300, Derek Parnell <derek@psych.ward> wrote: > >> On Tue, 02 Dec 2008 19:30:47 +0100, Fabian Claßen wrote: >> >>> Hi >>> I have a problem: >>> >>> What's wrong about this code? >>> Code: >>> >>> import std.stdio; >>> >>> int main() { >>> writefln("%f", add(100, 786, 56.0)); >>> return 0; >>> } >>> >>> double add(double delegate()[] dgs...) { >>> double result = 0; >>> foreach(double delegate() dg; dgs) { >>> result += dg; >>> } >>> return result; >>> } >>> >>> Or a better question is: How can I get the value out of the delegate? >> >> I don't understand your code, sorry. It seems to me that the argument you supplied to add() is a list of doubles and not a list of delegates. >> >> > > I was a bit surprized at first, too, but any value is indeed a lazy delegate that returns itself. And they C++ has some arcane rules :-)!!! -- Derek Parnell Melbourne, Australia skype: derek.j.parnell | |||
December 03, 2008 Re: Delegate | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Fabian Claßen | Fabian Claßen wrote:
> Jarrett Billingsley schrieb:
>> On Tue, Dec 2, 2008 at 1:30 PM, Fabian Claßen <admin@fabs-world.de> wrote:
>>> result += dg;
>>
>> Just change that line to "result += dg();". A delegate is like a
>> function; you call it to get the value.
>
> Oh thank you.
> I see. That's a stupid mistake of mine :D
> But I love D.
Great Stuff. We where all at this point at some time. Its fine that you posted to this group. However you might try posting your questions to D.learn next time, simply so other people who have the same problem can easily find the solution.
;)
-Joel
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply