on Mon Jan 30 2017, Nate Cook <swift-evolution@swift.org> wrote: >> On Jan 30, 2017, at 8:51 AM, Thorsten Seitz via swift-evolution >> <swift-evolution@swift.org> wrote: >> >>> Am 23.01.2017 um 02:14 schrieb James Froggatt via swift-evolution >>> <swift-evolution@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 _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution