Auto constructor [Was: Archetype language]

spir denis.spir at gmail.com
Mon Mar 21 02:58:51 PDT 2011


On 03/21/2011 12:55 AM, bearophile wrote:
> Among the things I've listed about Archetype there's one interesting thing. Class instances aren't PODs, but sometimes I prefer reference semantics and to populate fields in a plain way, expecially for simple classes.
>
> Time ago I and other people have suggested a syntax like (this also to avoid a class of bugs http://d.puremagic.com/issues/show_bug.cgi?id=3878 ):
>
>
> class Foo {
>    string x;
>    int y = 1;
>    this(this.x, this.y) {}
> }
> void main() {
>    Foo f3 = new Foo("hello", 10);
> }
>
>
> A simpler solution are classes with automatic constructors:
>
> class Foo {
>    string x;
>    int y = 1;
> }
> void main() {
>    Foo f1 = new Foo(); // Good
>    Foo f2 = new Foo("hello"); // Good
>    Foo f3 = new Foo("hello", 10); // Good
> }
>
>
> What kind of problems are caused by this? :-)
>
>
> Currently that syntax is supported for structs created as values, but not for structs created by pointer:
>
> struct Foo {
>    string x;
>    int y = 1;
> }
> void main() {
>    Foo* f1 = new Foo(); // OK
>    Foo* f2 = new Foo("hello"); // Error: no constructor for Foo
>    Foo* f3 = new Foo("hello", 10); // Error: no constructor for Foo
> }

I definitely want some feature like that in D.

Have no idea why a default seems complicated for classes while structs have it.
On the other hand, the syntax using "this.p" constructor parameter names is 
more general since it allows custom constructors:

class Point {
     float x,y;
     float dist;
     this(this.x, this.y) {
         this.dist = square(x*x + y*y);
     }
}

Ideally, I would like this feature without "this." parameters, but it requires 
named arguments...:
    auto p = new Point(x=1, y=2);
--> auto assign to members by name, then perform additional constructor tasks.


Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d mailing list