Declaring Ref Variables Inside Function Calls
Bill Baxter
wbaxter at gmail.com
Tue Mar 31 15:07:20 PDT 2009
On Wed, Apr 1, 2009 at 6:16 AM, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> Bill Baxter wrote:
>>
>> On Wed, Apr 1, 2009 at 5:03 AM, Sergey Gromov <snake.scaly at gmail.com>
>> wrote:
>>>
>>> Tue, 31 Mar 2009 12:18:21 -0700, Andrei Alexandrescu wrote:
>>>
>>>> Jarrett Billingsley wrote:
>>>>>
>>>>> On Tue, Mar 31, 2009 at 1:32 PM, Andrei Alexandrescu
>>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>>>
>>>>>> Jarrett Billingsley wrote:
>>>>>>>
>>>>>>> 2009/3/30 dsimcha <dsimcha at yahoo.com>:
>>>>>>>>
>>>>>>>> // How it works now:
>>>>>>>> uint foo;
>>>>>>>> string bar;
>>>>>>>> unpack(foo, bar) = someFunction();
>>>>>>>>
>>>>>>>> // vs. how I want it to work:
>>>>>>>> unpack(auto foo, auto bar) = someFunction();
>>>>>>>
>>>>>>> Cute, but uh, I'd much rather see tuples just be returnable.
>>>>>>
>>>>>> They are.
>>>>>
>>>>> template Tuple(T...)
>>>>> {
>>>>> alias T Tuple;
>>>>> }
>>>>>
>>>>> Tuple!(int, float) foo()
>>>>> {
>>>>> return Tuple!(3, 4.5);
>>>>> }
>>>>>
>>>>> foo.d(10): Error: functions cannot return a tuple
>>>>>
>>>>> Unless you're using some prerelease compiler, they are not.
>>>>
>>>> import std.typecons;
>>>>
>>>> Tuple!(int, float) foo()
>>>> {
>>>> return tuple(2, 4.5);
>>>> }
>>>>
>>>> The addition of the alias this feature and of constructor templates
>>>> makes std.typecons.Tuple even better.
>>>>
>>>> Andrei
>>>
>>> Unfair---std.typecons.Tuple is actually a struct!
>>>
>>> Well, basically struct is a run-time tuple, anyway.
>>>
>>> I think that all the buzz around "actual tuple support" boils down to
>>> requests for syntax sugar for construction and decomposition of
>>> anonymous structs. While typecons.Tuple is sorta OK for construction,
>>> things are still pretty ugly on the "decomposition" end.
>>
>> Right. In my ideal world I could use tuples like this:
>>
>> (int,float) a;
>
> That sucks. Is int(int, float) a function type or a juxtaposition of two
> types?
I should say that by "in my ideal world" what I meant was "forgetting
about all the baggage that D already has for a moment and starting
from a more or less clean slate". Things like the useless comma
operator.
But isn't a juxtaposition of two types a syntax error? So the above
would be a function type, not a juxtaposition of two types.
> Is (A, B) an expression or a type? And so on.
How does that differ from asking "Is A an expression or a type?"
If A and B are types, then (A,B) is a type.
>> (int,float) z = returns_tuple();
>
> Blech.
Blech to that, but you like
Tuple!(int,float) z = returns_tuple();
correct?
>> (int x, float y) = returns_tuple();
>
> I'd like that too, but what we should have is make any definition an
> expression.
>
>> auto tup = (2, 3.4);
>
> Belch (sic).
Belch to that, but again, you're saying this is great
auto tup = Tuple!(2, 3.4);
correct?
--bb
More information about the Digitalmars-d
mailing list