Hi Ian,

On Mon, Jun 27, 2016 at 8:18 PM, Ian Lance Taylor <i...@golang.org> wrote:
> On Sun, Jun 26, 2016 at 10:55 PM, Dan Kortschak
> <dan.kortsc...@adelaide.edu.au> wrote:
>> On Mon, 2016-06-27 at 07:49 +0200, Martin Geisler wrote:
>>> BTW, I was about to say that you could simplify the line one step
>>> further with
>>>
>>>   b := append(a[::len(a)], 3, 4)
>>>
>>> but that gives a compilation error:
>>>
>>>   prog.go:11: middle index required in 3-index slice
>>>
>>> I wonder what the rationale is for this? It seems inconsistent to me
>>> since the second (middle) index has a useful default (len(a)) that is
>>> used when there are only two indexes used.
>>
>> As I remember it, during the design discussions the possibility of using
>> the shortened syntax you show above was considered, but rejected as an
>> opening to bug entry (too much semantic weight on a single repeated
>> character).
>
> Yes.  And, also, the default for the middle index is not wholly
> obvious.  Should it be len(a) or (new) cap(a)?  In your example those
> happen to have the same value, but of course in general they do not.

Hmm, that's a good point that I hadn't considered :-) I figured it
would be len(a) so that

  a[x::z] = a[x:len(a):z]

That keeps the defaults intact from normal 2-index slicing.

For the indices to be in range, you must have z >= y where y = len(a).
So maybe one could argue that the middle index y could be clamped at
z, that is, the middle index y could be set to min(z, len(a)). That
way you can have a slice with length 10 and still write

  a[2::4] = a[2:min(4, 10):4] = a[2:4:4]

where there indices are all in range.

I see how this becomes more complicated than I initially thought... is
that the kind of mess you were thinking of? :-)

-- 
Martin Geisler

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to