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