[Issue 2939] lazy evaluation not invoked for lambda function
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue May 5 13:16:08 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2939
------- Comment #7 from shro8822 at vandals.uidaho.edu 2009-05-05 15:16 -------
(In reply to comment #6)
> (In reply to comment #5)
>
> > What is happening in the original cases is that the 'dg();' is evaluating
> > *to the* lambda rather than *evaluating* the lambda. And this is correct as
> > the expression that f was called with is the lambda. (If there is a problem
> > here is it the old one of the skipping the perens on void functions thing)
> >
> > To look at it another way, dg is (almost):
> >
> > delegate void(){ return delegate void(){ ok = true; } }
>
> Yes, I'm pretty sure that's what's happening. But there are two issues:
>
> (1) It's extremely counterintuitive, easy to forget, and when you invariably
> get bitten by it, the compiler and runtime give no help diagnosing the
> problem.
fair enough complaint
>
> (2) Why does passing a delegate reference work, but not a lambda? They are
> *the same type* and you'd expect the compiler to do *the same thing* with
> both.
>
I can't prove it but I'd bet this is the same thing: the expression "okay" is
begin converted to "okay()" via the no perens rule. so for dg on the inside you
get:
delegate void(){ okay(); }
--
More information about the Digitalmars-d-bugs
mailing list