Foreach, return not exist the function.

Zaher Dirkey via Digitalmars-d digitalmars-d at puremagic.com
Mon Jan 12 00:18:54 PST 2015


On Sunday, 11 January 2015 at 23:50:18 UTC, Ali Çehreli wrote:
> On 01/11/2015 12:25 PM, Zaher Dirkey wrote:
>
> > reproduce example here
> > http://dpaste.dzfl.pl/13fb453d0b1e
>
> That link doesn't work for me. (?)
>
> Does opApply return the delegate's return value ('b' below)?
>
> import std.stdio;
>
> struct S
> {
>     int opApply(int delegate(int) dg)
>     {
>         foreach (i; 0 .. 10) {
>             int b = dg(i);
>             if (b) {
>                 writefln("Exiting opApply with %s", b);
>                 return b;
>             }
>         }
>
>         return 0;
>     }
> }
>
> int foo()
> {
>     auto s = S();
>     foreach (i; s) {
>         writeln(i);
>         return 42;
>     }
>
>     return 0;
> }
>
> void main()
> {
>     assert(foo() == 42);
> }
>
> Ali

It in breaking the loop in opApply

    if (result==0) {
must be
   if (result) {

Thanks to Ali, and Zor at #D (freenode)


More information about the Digitalmars-d mailing list