On Thursday, 30 May 2013 at 21:40:47 UTC, js.mdnq wrote:
On Thursday, 30 May 2013 at 12:32:46 UTC, bearophile wrote:
If you don't like to introduce a new keyword, then a different alternative is to use the @ again, a bit like UDAs:

@{...}

@[10] @{int, string} tup = @{1, "hi"}; // With UDA.
foreach (Float; @{float, double, real}) { ... }
auto @{x, y} = @{1, "hi"};
@{auto x, y} = @{1, "hi"};
@{int x, string y} = @{1, "hi"};
foreach (i, const @{x, y}; [@{1,2}, @{3,4}, @{5,6}, ...]) {
void foo(@{int, string name}, string msg);
(@{A a, B b}) => a + b;
switch (tup) { case @{1, 2}: ... }

Bye,
bearophile

Or rather # or & as they do have some inherent relation to tuples..

#(int, string) tup
&(int, string) tup

The second remind one it is a sort of concatenation of types. e.g., int & string.

That actually looks good...
I liked idea of:

    auto (x, y) = foo();
    (int x1, string y1) = foo();

    (int, string) foo() {

         (int tmp, string tmp2) = (3, "dsa");

         return (42, "dsa");
    }

but it was shoot down because of various issues.

Then proposal with {} risen:

    auto {x, y} = foo();
    {int x1, string y1} = foo();

    {int, string} foo() {

        {int tmp, string tmp2} = {3, "dsa"};

        return {42, "dsa"};
    }


Now this:

    auto #(x, y) = foo();
    #(int x1, string y1) = foo();

    #(int, string) foo() {

        #(int tmp, string tmp2) = #(3, "dsa");

        return #(42, "dsa");
    }

I like eye-candies and the 1st syntax looks the best for me but it won't happen. Both 2nd example and 3rd proposed by js.mdnq looks good but IMHO the 3rd is way more clear what is it about... also {} IMHO clash a bit with our curly-bracket based language... it gets a bit complicated where function begins, where if blocks begins and where tuple declaration begins.

My 2 cents :))

bearophile what do you think?

Reply via email to