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.

— 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