> On Mar 15, 2017, at 8:21 PM, Nicholas Maccharoli <nmacchar...@gmail.com> 
> wrote:
> 
> Jaden,
> 
> Yes that error message is not so great.
> As for the use of guard  `if someCondition { fatalError(...)}` seems to be a 
> common way of phrasing fatal errors 
> in the standard library but guard works just as well.

I’d guess that’s because most of the standard library predates the existence of 
`guard`, but I’m not sure! Either spelling is probably fine (and more the topic 
of a pull request than a SE review 🙂).

> 
> I updated the proposal to have the following definition:
> 
> extension Strideable where Stride: Integer {
>     func clamped(to range: Range<Self>) -> Self {
>         guard !range.isEmpty { fatalError("Can not clamp to an empty range.") 
> }
>         return clamped(to: range.lowerBound...(range.upperBound - 1))
>     }
> }
> 
> - Nick 
> 
> On Thu, Mar 16, 2017 at 11:57 AM, Jaden Geller <jaden.gel...@gmail.com 
> <mailto:jaden.gel...@gmail.com>> wrote:
> 
>> On Mar 15, 2017, at 7:33 PM, Nicholas Maccharoli <nmacchar...@gmail.com 
>> <mailto:nmacchar...@gmail.com>> wrote:
>> 
>> Right, there were a few things missing!
>> Thanks so much for pointing them out everyone.
>> 
>> Dave - Great idea! I have updated the motivation section section as you 
>> suggested!
>> 
>> Neil - Yes I also think the wording could be a bit better but since the word 
>> `clamped` is already being used 
>>           I thought I would keep it consistent. 
>> 
>> Sean - Looks as if its a term of art to me as well. 
>> 
>> Nate,
>> 
>> Good catch! Yes I also thing clamping on an empty range should be a fatal 
>> error as well.
>> An empty range is impossible to create with `ClosedRange` so I left the 
>> implementation 
>> of that alone, but it is possible with `Range` so I updated the extension on 
>> `Strideable` like so:
>> 
>> extension Strideable where Stride: Integer {
>>     func clamped(to range: Range<Self>) -> Self {
>>         if range.isEmpty { fatalError("Can't form Range with upperBound < 
>> lowerBound") }
>>         return clamped(to: range.lowerBound...(range.upperBound - 1))
>>     }
>> }
>> 
>> 
>> 
>> Jaden,
>> 
>> Yeah I think a simple `if` check would work as well.
> 
> I would suggest using guard. It is more idiomatic Swift for something that 
> “fails out”.
> 
> Also, I think this is a bad error message. The `Range` was already created! 
> There was no problem forming it. It was passed as the argument, no problem at 
> all. The problem is trying to *clamp* to an empty range, not forming an empty 
> range. I would rephrase it to say something like "Cannot clamp to an empty 
> range”. No reason to redefine what an empty range is by mentioning 
> `upperBound < lowerBound`.
> 
> Cheers,
> Jaden Geller
> 

Cheers,
Jaden Geller
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to