On Thu, Apr 12, 2012 at 9:58 AM, Niko Matsakis <n...@alum.mit.edu> wrote:

> What I mainly dislike about the current constructor system is having to
> repeat everything all the time.  Sometimes this is ok but usually a
> constructor just wants to initialize all (or most) of the fields from the
> values given in the parameters.  One possibility that patrick and I had
> talked about is that if there is no constructor defined, one can construct
> the class using a literal syntax like `C { f1: ..., f2: ... }`.  But I am
> concerned that this is kind of discontinuous with the
> constructor---implementing a constructor would then require rewriting every
> allocation site.
>
> So perhaps we should just say there is a default constructor of the form:
>
>    new(f1: T1, ..., fN: T2) {
>        self.f1 = f1;
>        ...
>        self.fN = fN;
>    }
>
> for each field `f1`, ..., `fN` defined in the class (and in the same order
> as they are defined).
>

Anecdotally, from the perspective of this prospective user, default
constructors like that give me heartburn (for the first example that pops
into my head, say two fields of the same type change in position inside the
class - now you have to fix all of your default constructors).  If there is
going to be an implicit constructor, I would prefer the literal style you
listed.  It hearkens back to c99-style field-name designated initializers,
and is very explicit.
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to