Tuple assignment
Denis Koroskin
2korden at gmail.com
Thu Oct 7 00:56:44 PDT 2010
On Thu, 07 Oct 2010 11:42:06 +0400, Brad Roberts <braddr at puremagic.com>
wrote:
> On 10/6/2010 11:58 PM, Walter Bright wrote:
>> Russel Winder wrote:
>>> Python may be the best base to compare things to as tuple assignment
>>> has
>>> been in there for years.
>>>
>>> Pythons choice is not a car/cdr approach but an exact match approach.
>>> so if t represents a tuple datum or a function returning a tuple:
>>>
>>> x = t
>>>
>>> then x is a tuple -- remembering that variables are all just references
>>> to objects implemented via keys in a dictionary, and:
>>>
>>> a , b , c = t
>>> or
>>> ( a , b , c ) = t
>>>
>>> is tuple assignment where now t is required to be a tuple of length 3.
>>> cf.
>>
>> The first thought was to make it an exact match approach. Andrei
>> thought that
>> the car/cdr one was better, though, and I find it intuitively
>> appealing, too.
>> Perhaps Python missed an important use case?
>>
>> Or perhaps the ambiguity as to whether the last item gets to be a value
>> or
>> another tuple is too much.
>
> I think the ambiguity should be avoided. There was one language I used
> ages ago
> that used a token to signal the use of the last arg as a 'rest' usage.
> If I
> remember right, it used:
>
> (a, @b) = aggregate; // a = aggregate[0], b = aggregate[1..$]
>
> It also allowed: (a, @aggregate) = aggregate; // essentially a pop
> operation.
>
> That said, it was a weakly typed language, so it's application to D has
> to be
> taken with an appropriate dose of salt. For D, I think using the @
> would clash
> badly with the attribute syntax, so an alternative that's not horrid:
>
> (a, b...) = aggregate;
>
> Later,
> Brad
Interesting idea, I like it!
More information about the Digitalmars-d
mailing list