scope struct?

deadalnix deadalnix at gmail.com
Mon Oct 17 05:43:08 PDT 2011


Nice trick ! However, in D, you have scope(exit) scope(success) and 
scope(failure) to do similar stuffs.

I personally use both, on a case by case basis.

Le 17/10/2011 06:47, Steve Teale a écrit :
> Is not needed because structs are inherently scope.
>
> I'm sure experienced D programmers do this all the time when they want
> something done on exit from a scope, but I never had, and maybe there are
> others who haven't, particularly if coming from a C++ 'use classes for
> everything' background.
>
> import std.stdio;
>
> bool glob;
>
> struct Sentinel
> {
>     void function() doit;
>     bool already;
>     this(void function() f)
>     {
>        doit = f;
>        already = false;
>     }
>
>     ~this()
>     {
>        if (!already)
>        {
>           writeln("Doing it now");
>           doit();
>        }
>        else
>           writeln("Won't bother");
>     }
>
>     void dontBother() { already = true; }
> }
>
> void reset() { glob = false; }
>
> void main(string[] args)
> {
>     glob = true;
>     {
>        Sentinel s = Sentinel(&reset);
>        writeln("Doing stuff in the scope");
>        if (args.length>= 2&&  args[1] == "db")
>           s.dontBother();
>     }
>     writeln(glob);
> }



More information about the Digitalmars-d-learn mailing list