On Wednesday, 23 January 2013 at 09:52:40 UTC, Namespace wrote:
On Wednesday, 23 January 2013 at 08:33:44 UTC, SaltySugar wrote:
Can someone explain me scope and with statements?

with statements simplify the access to a class, struct or something else.
For example:
class A {
public:
        int b = 42;
}

A a = new A();
normal access:
writeln(a.b); // writes 42

with 'with':

with (a) {
    writeln(b); // writes 42
}

scope is one of my favorite features. You can create scopes which are executed if the appropriate case comes.
For example at the end of a scope, by success of a scope etc.

Example:
int* mem = cast(int*) malloc(10 * int.sizeof);
scope(exit) free(mem);

After leaving scope the memory is freed.
Otherwise you have to write 'free(mem)' at the end of the scope and thats a thing that I forget sometimes in C.


I often use with to initialize objects (as D doesn't have object initializers as c#):

auto c = new C(); // some class
with(c) {
  someProp = someValue; // instead of c.someProp
  // etc
}

scope also has a different meaning if used in function parameters:
void f(scope C c) {
// not allowed to pass c anywhere - it's not allowed to leave this scope
}

Reply via email to