David, you can use two binary operators (or overload the same one twice if you want) to create syntax that behaves like a ternary operator.
Here’s an example of using a pair of operators to interpolate between two CGPoint values: let interpolatedPoint = p1 <~~ 0.3 ~~> p2 See here <https://github.com/j-h-a/Animation/blob/develop/Animation/Interpolation.swift> for the code that defines them. I went for two different operators in the end, but when experimenting I also tried using the same one, and it works fine because of overloading, for example: infix operator ~~> : InterpolationPrecedence public func ~~> <T: Interpolatable>(from: T, alpha: Double) -> (T, Double) { return (from, alpha) } public func ~~> <T: Interpolatable>(lhs: (T, Double), rhs: T) -> T { return lerp(from: lhs.0, to: rhs, alpha: lhs.1) }let interpolatedPoint = p1 ~~> 0.3 ~~> p2 And as Anton demonstrated earlier, ?: can be emulated the same way. The errors you would get if you omitted the second operator and third part are not as useful as they can be with ?:. The compiler can probably do a much better job of optimising with ?: as a special case, and it’s a common pattern regardless of syntax, so people would just write their own if it wasn’t there. So I think it makes sense to have it in the language. And if it wasn’t already there, I do think that it would be something we should add (same for ??). On Thu, 27 Oct 2016 at 01:44 David Sweeris via swift-evolution < [email protected]> wrote: > > On Oct 25, 2016, at 23:51, Charlotte Angela Tortorella via swift-evolution > <[email protected]> wrote: > > Disadvantages of The Ternary Operator > <https://gist.github.com/Qata/25a11c21200f1cf8f43ed78e9ffd727c#disadvantages-of-the-ternary-operator> > > [...] > > > 6. This operator is only applicable to a single type, `Bool`. > > [...] > > > Proposed Approach > <https://gist.github.com/Qata/25a11c21200f1cf8f43ed78e9ffd727c#proposed-approach> > > We should drop the ternary operator in favor of a new extension to `Bool`. > > > I'm not sure proposals should do exactly what they claim is a downside of > the current approach. Especially when the downside in question is > inherent to the problem being solved. > > FWIW, the only thing I find confusing about the ternary operator is that I > can't overload it. Being able to define my own ternary operators would be > great, but I don't have an answer to obvious potential ambiguities. > > - Dave Sweeris > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
