November 01, 2008 Re: Unofficial wish list status.(Nov 2008) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu Attachments: | Andrei Alexandrescu wrote:
> I've been thinking of defining a simple function that binds to variable addresses and allows assignment from a tuple, in which case the code would be:
>
> group(&code, &msg) = getError;
>
> In "the future" we'll have variadic ref arguments, in which case the "&"s can be dropped:
>
> group(code, msg) = getError;
I've managed to make this work right now:
group!(code, msg) = getError();
as well as (with a different function):
group_!(code, msg) = getError();
auto myGroup = group_!(code, msg);
myGroup = getError();
(The second example has several implementations in fact. Unfortunately,
all of them currently allocate a closure for the variables if they're
local. The first one doesn't have that problem)
All of this is D2+Phobos, by the way. Though something similar could likely be made in D1 (minus the closure issues, obviously).
Unfortunately it does have a severe limitation: it only works on
straight variables because it uses alias template parameters.
You can't assign to *b or foo.a, for instance (unless it's static).
See attachment for code.
|
November 01, 2008 Re: Unofficial wish list status.(Nov 2008) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | Frits van Bommel: > I've managed to make this work right now: [...] Take a look at the Record!(), record in my libs (for D1), in modules templates and func http://www.fantascienza.net/leonardo/so/libs_d.zip Bye, bearophile |
November 01, 2008 Re: Unofficial wish list status.(Nov 2008) | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | bearophile wrote:
> Frits van Bommel:
>> I've managed to make this work right now:
> [...]
>
> Take a look at the Record!(), record in my libs (for D1), in modules templates
> and func
> http://www.fantascienza.net/leonardo/so/libs_d.zip
Is there a link to online documentation?
Andrei
|
November 01, 2008 Re: Unofficial wish list status.(Nov 2008) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | Andrei Alexandrescu: > Is there a link to online documentation? Yes, there is (only because you are one of the most gentle persons of this newsgroup): http://www.fantascienza.net/leonardo/so/dlibs/all.html The form of that page will improve later. Bye, bearophile |
November 03, 2008 Re: Unofficial wish list status.(Nov 2008) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Denis Koroskin | Denis Koroskin wrote:
> On Sat, 01 Nov 2008 19:33:01 +0300, Andrei Alexandrescu <SeeWebsiteForEmail@erdani.org> wrote:
>
>> Denis Koroskin wrote:
>>> On Sat, 01 Nov 2008 19:04:16 +0300, Andrei Alexandrescu <SeeWebsiteForEmail@erdani.org> wrote:
>>>
>>>> KennyTM~ wrote:
>>>>> ore-sama wrote:
>>>>>> 4tuu4k002@sneakemail.com Wrote:
>>>>>>
>>>>>>> 105 Multiple return values (tuples (#28)
>>>>>>> int, int getPoint();
>>>>>>> int a,b;
>>>>>>> a,b = getPoint();
>>>>>>
>>>>>> Provided we have lvalue array literals, this can fit to general
>>>>>> array operations rules:
>>>>>> int[] getPoint();
>>>>>> int a,b;
>>>>>> [a,b]=getPoint();
>>>>> int code;
>>>>> string msg;
>>>>> [code, msg] = getError();
>>>>
>>>> Tuple!(int, "code", string, "msg") getError();
>>>> auto e = getError;
>>>>
>>>>
>>>> Andrei
>>> Imagine 'code' and 'msg' are already there as local variables and
>>> you want to reuse them. How should you do this?
>>
>> I've been thinking of defining a simple function that binds to variable addresses and allows assignment from a tuple, in which case the code would be:
>>
>> group(&code, &msg) = getError;
>>
>> In "the future" we'll have variadic ref arguments, in which case the "&"s can be dropped:
>>
>> group(code, msg) = getError;
>>
>> Also in "the future" variable definitions will be expressions, in which case the code to define and assign code and msg becomes:
>>
>> group(int code, string msg) = getError;
>>
>>
>> Andrei
>
> Hmmm, this is almost as nice (inspired by jQuery):
>
> $(code, msg) = getError(); // :)
Sure.
$ is not an identifier, but this will work.
import tools.base;
alias ptuple _;
Stuple!(int, string) test() { return stuple(4, "foo"); }
void main() { int a; string b; _(a, b) = test(); }
:)
|
November 03, 2008 Re: Unofficial wish list status.(Nov 2008) | ||||
---|---|---|---|---|
| ||||
Posted in reply to downs | downs wrote:
> Denis Koroskin wrote:
>> On Sat, 01 Nov 2008 19:33:01 +0300, Andrei Alexandrescu
>> <SeeWebsiteForEmail@erdani.org> wrote:
>>
>>> Denis Koroskin wrote:
>>>> On Sat, 01 Nov 2008 19:04:16 +0300, Andrei Alexandrescu
>>>> <SeeWebsiteForEmail@erdani.org> wrote:
>>>>
>>>>> KennyTM~ wrote:
>>>>>> ore-sama wrote:
>>>>>>> 4tuu4k002@sneakemail.com Wrote:
>>>>>>>
>>>>>>>> 105 Multiple return values (tuples (#28)
>>>>>>>> int, int getPoint();
>>>>>>>> int a,b;
>>>>>>>> a,b = getPoint();
>>>>>>> Provided we have lvalue array literals, this can fit to general
>>>>>>> array operations rules:
>>>>>>> int[] getPoint();
>>>>>>> int a,b;
>>>>>>> [a,b]=getPoint();
>>>>>> int code;
>>>>>> string msg;
>>>>>> [code, msg] = getError();
>>>>> Tuple!(int, "code", string, "msg") getError();
>>>>> auto e = getError;
>>>>>
>>>>>
>>>>> Andrei
>>>> Imagine 'code' and 'msg' are already there as local variables and
>>>> you want to reuse them. How should you do this?
>>> I've been thinking of defining a simple function that binds to
>>> variable addresses and allows assignment from a tuple, in which case
>>> the code would be:
>>>
>>> group(&code, &msg) = getError;
>>>
>>> In "the future" we'll have variadic ref arguments, in which case the
>>> "&"s can be dropped:
>>>
>>> group(code, msg) = getError;
>>>
>>> Also in "the future" variable definitions will be expressions, in
>>> which case the code to define and assign code and msg becomes:
>>>
>>> group(int code, string msg) = getError;
>>>
>>>
>>> Andrei
>> Hmmm, this is almost as nice (inspired by jQuery):
>>
>> $(code, msg) = getError(); // :)
>
> Sure.
>
> $ is not an identifier, but this will work.
>
> import tools.base;
>
> alias ptuple _;
>
> Stuple!(int, string) test() { return stuple(4, "foo"); }
>
> void main() { int a; string b; _(a, b) = test(); }
>
> :)
$(a, b);
_(a, b);
*has flashbacks to his days in the jungles of Perl*
|
Copyright © 1999-2021 by the D Language Foundation