[swift-evolution] Strings in Swift 4
Dave Abrahams
dabrahams at apple.com
Mon Jan 30 13:37:44 CST 2017
on Mon Jan 30 2017, Nate Cook <swift-evolution at swift.org> wrote:
>> On Jan 30, 2017, at 8:51 AM, Thorsten Seitz via swift-evolution <swift-evolution at swift.org> wrote:
>>
>>> Am 23.01.2017 um 02:14 schrieb James Froggatt via swift-evolution <swift-evolution at swift.org>:
>>>
>>> Could we add subscript labels to the list of options? While keeping
>
>>> the range syntax is appealing, I'm concerned it may cause confusion
>>> if the operators are used out of context.
>>
>> Good point!
>>
>>> The wording is up for debate, but something like this should be a fair alternative:
>>> items[from: i]
>>> items[upTo: i]
>>
>> For me that's at least as readable as the range syntax.
>>
>>>
>>> Sorry if this has been covered elsewhere (can't find the answer in
>>> this thread), but my first questions on discovering these operators
>>> (my source of confusion) would be what happens if I try the
>>> following:
>>> let partialRange = 0..< //is this an infinite range?
>>> let x = items[partialRange] //shouldn't this cause an out of bounds error?
>>
>> Good point! Probably this shouldn't be allowed, making the literal
>> range syntax with open ends tied into the subscript which is a bit
>> confusing indeed.
>
> `partialRange` here is an incomplete range, not an infinite one.
> When you use an incomplete range to subscript a collection, the
> collection "completes" it by filling in the start or end index as
> required. You can see more about the details of incomplete ranges in
> this proposal:
> https://github.com/apple/swift-evolution/blob/master/proposals/0132-sequence-end-ops.md
>
> One other aspect of incomplete ranges that I haven't seen discussed
> (though I may have missed it) is how they work inpattern matching. It
> would be nice to use incomplete ranges in switch statements, so that
> instead of:
>
> switch x {
> case let y where y < 0: print("< 0")
> case 0...10: print("0-10")
> case let y where y > 10: print("> 10")
> default: print("wat")
> }
>
> we could write:
>
> switch x {
> case ..<0: print("< 0")
> case 0...10: print("0-10")
> case 10...: print("> 10")
> default: print("wat")
> }
That's interesting!
> To me, that implies that we'll want a postfix ... operator to exist,
> though I agree it's not clear what it should do in a subscript. Are
> there contexts in which we would want i... and i..< to do different
> things?
AFAICT no, so there's no reason to support both.
--
-Dave
More information about the swift-evolution
mailing list