> On Jul 6, 2016, at 9:16 PM, Pyry Jahkola <[email protected]> wrote:
> 
> I think one more thing needs clarification. Shouldn't the "defaulted" 
> `rounded()` and `round()` be defined as protocol extension methods *without* 
> the possibility to override the default rounding mode in a conforming type? 
> Like so:
> 
>    public protocol FloatingPoint {
>      ...
>      func rounded(_ rule: RoundingRule) -> Self
>      mutating func round(_ rule: RoundingRule)
>    }
> 
>    public extension FloatingPoint {
>      public func rounded() -> Self {
>        return rounded(.toNearestOrAwayFromZero)
>      }
>      public mutating func round() {
>        round(.toNearestOrAwayFromZero)
>      }
>    }
> 
> I would find it quite surprising if some type conforming to FloatingPoint 
> rounded differently by default than the others.

Yes good point.  That is my mistake summarizing the discussion of the core team 
today.  This is indeed how it should be structured.

-Chris


> 
> — Pyry
> 
>> Chris Lattner wrote:
>> 
>> Since protocol requirements cannot currently have default arguments, the 
>> desired behavior should be achieved with two overloads of each operation:
>> 
>> protocol FloatingPoint {
>> ...
>> /// Returns a rounded representation of `self`, according to the specified 
>> rounding rule.
>> func rounded() -> Self
>> func rounded(_ rule: RoundingRule) -> Self
>> 
>> /// Mutating form of `rounded`.
>> mutating func round()
>> mutating func round(_ rule: RoundingRule)
>> }
>> 
>> Where the no argument cases can be implemented with a protocol extension 
>> that forwards to the single-argument versions.

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to