View mode: basic / threaded / horizontal-split · Log in · Help
November 29, 2012
opSlice Bug?
Why I have to write
arr2[] += arr[][]
instead of
arr2[] += arr[]
? Bug or 'feature'? :P

Code:
http://dpaste.dzfl.pl/4c732f4c
November 29, 2012
Re: opSlice Bug?
On 11/29/2012 08:15 AM, Namespace wrote:
> Why I have to write
> arr2[] += arr[][]
> instead of
> arr2[] += arr[]
> ? Bug or 'feature'? :P
>
> Code:
> http://dpaste.dzfl.pl/4c732f4c

opSplice, eh? Is that another undocumented feature or one that has been 
deprecated?

Ali
November 29, 2012
Re: opSlice Bug?
On Thursday, 29 November 2012 at 16:46:45 UTC, Ali Çehreli wrote:
> On 11/29/2012 08:15 AM, Namespace wrote:
>> Why I have to write
>> arr2[] += arr[][]
>> instead of
>> arr2[] += arr[]
>> ? Bug or 'feature'? :P
>>
>> Code:
>> http://dpaste.dzfl.pl/4c732f4c
>
> opSplice, eh? Is that another undocumented feature or one that 
> has been deprecated?
>
> Ali

http://dlang.org/operatoroverloading.html#Slice
November 29, 2012
Re: opSlice Bug?
Ali Çehreli:

> opSplice, eh? Is that another undocumented feature or one that 
> has been deprecated?

I think it's not deprecated:
http://dlang.org/operatoroverloading.html#Slice

Bye,
bearophile
November 29, 2012
Re: opSlice Bug?
On 11/29/2012 08:50 AM, Namespace wrote:
> On Thursday, 29 November 2012 at 16:46:45 UTC, Ali Çehreli wrote:
>> On 11/29/2012 08:15 AM, Namespace wrote:
>>> Why I have to write
>>> arr2[] += arr[][]
>>> instead of
>>> arr2[] += arr[]
>>> ? Bug or 'feature'? :P
>>>
>>> Code:
>>> http://dpaste.dzfl.pl/4c732f4c
>>
>> opSplice, eh? Is that another undocumented feature or one that has
>> been deprecated?
>>
>> Ali
>
> http://dlang.org/operatoroverloading.html#Slice

Thanks. I really did read it as opS_p_lice, found a few references on 
dlang.org, none on any spec page and got a little frustrated. I did not 
realize that I had clearly misread it.

I had even written some notes about opSlice:

  http://ddili.org/ders/d.en/operator_overloading.html

Apparently I had thought that it better returned a special type:

struct Range
{
    // ...
}

struct Container
{
    // For the object[] syntax
    Range opSlice()
    {
        Range allElements;
        // ... must provide access to all elements ...
        return allElements;
    }

/* ... */
}

Ali
November 29, 2012
Re: opSlice Bug?
Yes, that could be better (but I don't like it), but my code 
should compile as well, or not?
November 29, 2012
Re: opSlice Bug?
On 11/29/2012 08:15 AM, Namespace wrote:
> Why I have to write
> arr2[] += arr[][]
> instead of
> arr2[] += arr[]
> ? Bug or 'feature'? :P
>
> Code:
> http://dpaste.dzfl.pl/4c732f4c

Apparently, the array-wise operations require the following syntax:

    a[] += b[];

In other words, the compiler wants to see [] on the right-hand side as 
well. The following does not work with the same error message that you get:

    int[] a, b;
    a[] += b;

Error: invalid array operation a[] += b (did you forget a [] ?)

It is the same in your case. You have a function that returns a slice 
but the compiler still wants to see [] on the rigth-hand side:

int[] foo()
{
    int[] b;
    return b;
}

void main()
{
    int[] a;
    a[] += foo();    // <-- Same compilation error
}

That's why you need to put the [] after it:

    a[] += foo()[];

I think it is just the requirement of the syntax. (?)

Ali
November 29, 2012
Re: opSlice Bug?
That is what I thought also.
That is awfully and limited. :/
Top | Discussion index | About this forum | D home